为什么在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

回到顶部