java - 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)
那么为什么要使用这个呢?什么目的?
谢谢,
解决方案
您在这里看到的是Casting,在这种情况下是显式转换,因为您告诉编译器“bb”将是“AAA”类的实例。这使您可以调用特定的“AAA”类方法,即使“bb”被实例化为“BBB”类。如果您想了解更多信息,可以阅读有关“多态性”和“铸造”的 Oracle 文档。
请参阅此链接中的“铸造对象”:
JP 编辑
然而,当公共字段隐藏在子类中时,存在一种非常变态的情况。在这种情况下,您应该强制转换为父类以访问隐藏字段(可能与子类中声明的类型不同)。
请参阅:
https ://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html
Java 继承和隐藏的公共字段
推荐阅读
- amazon-dynamodb - 查询 DynamoDB 表以获取标志值为 true 的所有项目
- java - 带有复选框的 Swing JMenu
- vue.js - Vuetify - TypeError:Vue.observable 不是函数
- sql-server - Scala,Play 框架,Slick:db join query with filter on enumeration field
- angular - 访问没有扩展名的静态文件时防止 Angular 运行
- flutter - 自定义 TextInputFormatter
- r - 在具有分类变量的 r 输出中使用 lm() 的多元线性回归不完整?
- sql-server - 在两个 SQL Server 表中插入/更新数据
- wordpress - 添加到购物车按钮将我带到产品页面
- r - 根据具有多个值的其他列中的值创建新列