1

当我有这些代码时:

ASuperClass super1 = new ASuperClass(); 
ASubClass sub1 = new ASubClass(3); 
sub1 = (ASubClass) super1; // this line compiled ok BUT has runtime Error  LINE 3 
ASubClass sub2 = new ASuperClass(); // this line compiled NOT ok  LINE 4

我的问题是,为什么第 3 行中的错误(“ASuperClass cannot be cast to ASubClass”)在第 3 行是运行时错误,而不是类似于第 4 行中的错误的编译错误,这是一个编译错误。这背后的逻辑是什么?非常感谢!

4

1 回答 1

5

你得到一个运行时错误,因为你告诉编译器(通过显式转换)相信你没有犯错误,所以它忽略了错误并且没有在编译时检测到它。但是当程序运行时,你会得到一个异常,因为super1它实际上是 aASuperClass而不是 a ASubClass

在第二种情况下,您会遇到编译错误,因为编译器知道您犯了错误(例如,您并没有告诉他通过强制转换来信任您)。

于 2013-05-04T07:58:24.560 回答