我从书中看到了
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)
相同。
那么为什么要使用它呢?目的是什么?
谢谢
答案 0 :(得分:1)
您在这里看到的是铸造,在这种情况下为显式强制转换,因为您告诉编译器“ bb”将是类“ AAA”的实例。这样即使在将“ bb”实例化为“ BBB”类时,也可以调用特定的“ AAA”类方法。 如果您想了解更多信息,可以阅读有关“多态性”和“铸造”的oracle文档。
请参阅此链接中的“铸造对象”:
由JP编辑
但是,当公共场所被隐藏在儿童班中时,情况很不正常。在这种情况下,您应该强制转换为父类以访问隐藏的字段(其类型可能与子类中声明的类型不同)。
请参阅:
https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html
Java inheritance and hidden public fields