java({(ClassName)InstanceName)的用途是什么?

时间:2019-02-08 20:04:35

标签: java oop

我从书中看到了

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)相同。

那么为什么要使用它呢?目的是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

"Inheritance" Oracle Docs

由JP编辑
但是,当公共场所被隐藏在儿童班中时,情况很不正常。在这种情况下,您应该强制转换为父类以访问隐藏的字段(其类型可能与子类中声明的类型不同)。

请参阅:
https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html
Java inheritance and hidden public fields