首页 > 解决方案 > java中的((ClassName)InstanceName)有什么用?

问题描述

我从一本书中看到了这个

class AAA {

}

class BBB extends AAA {


    public static void main(String[] args) {
        BBB bb = new BBB();
        System.out.println(bb.equals((AAA) bb));  // true
        System.out.println(bb.equals((BBB) bb));  // true
    }
}

简单来说,BBB 是 AAA 的子类。

但是当创建 BBB 的实例时bb,我在其他地方使用该实例之前看到括号中的 className。所以我测试了相等性,它似乎 与和bb相同。((AAA) bb)((BBB) bb)

那么为什么要使用这个呢?什么目的?

谢谢,

标签: javaoop

解决方案


您在这里看到的是Casting,在这种情况下是显式转换,因为您告诉编译器“bb”将是“AAA”类的实例。这使您可以调用特定的“AAA”类方法,即使“bb”被实例化为“BBB”类。如果您想了解更多信息,可以阅读有关“多态性”和“铸造”的 Oracle 文档。

请参阅此链接中的“铸造对象”:

“继承”Oracle 文档

JP 编辑
然而,当公共字段隐藏在子类中时,存在一种非常变态的情况。在这种情况下,您应该强制转换为父类以访问隐藏字段(可能与子类中声明的类型不同)。

请参阅:
https ://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html
Java 继承和隐藏的公共字段


推荐阅读