为什么在instanceOf之后进行转换?
在下面的示例中(来自我的Coursepack),我们希望给该Square实例c1一些其他对象的引用p1,但前提是这两个对象是兼容类型的。
if (p1 instanceof Square) {c1 = (Square) p1;}
我在这里不明白的是,我们首先检查p1确实为Square,然后仍将其强制转换。如果是Square,为什么要投射?
我怀疑答案在于表观类型和实际类型之间的区别,但是我还是很困惑……
编辑:
编译器将如何处理:
if (p1 instanceof Square) {c1 = p1;}
Edit2:
是instanceof检查实际类型而不是外观类型的问题吗?然后演员表改变了明显的类型?
谢谢,
回答:
请记住,您始终可以将Square实例分配给继承链上方的类型。然后,您可能需要将不太具体的类型转换为更具体的类型,在这种情况下,您需要确保您的转换有效:
Object p1 = new Square();Square c1;
if(p1 instanceof Square)
c1 = (Square) p1;
以上是 为什么在instanceOf之后进行转换? 的全部内容, 来源链接: utcz.com/qa/403227.html