为什么要在实例之后强制转换?旧代码将无法正常工作
2022-09-01 12:44:04
在下面的示例(来自我的课程包)中,我们希望为实例提供其他对象的引用,但前提是这2个是兼容的类型。Square
c1
p1
if (p1 instanceof Square) {c1 = (Square) p1;}
我不明白的是,我们首先检查它确实是一个,然后我们仍然投射它。如果是,为什么投?p1
Square
Square
我怀疑答案在于表观类型和实际类型之间的区别,但我仍然感到困惑......
编辑:
编译器将如何处理:
if (p1 instanceof Square) {c1 = p1;}
Edit2:
问题是检查实际类型而不是表面类型吗?然后演员表改变了表观类型?instanceof