2013-05-04 49 views
1

当我有THES代码:符合类型不匹配:不能从ASuperClass转换为ASubClass

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不能转换到ASubClass”)3运行时错误但不是编译错误类似于第4行中的错误,这是一个编译错误。这背后的逻辑是什么? 非常感谢!

回答

5

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

在第二种情况下,编译错误编译错误,因为编译器知道你犯了一个错误(并且你没有通过抛出例如告诉他信任你)。

+1

一个非常好的解释。 – sschrass 2013-05-04 08:51:51

+0

很高兴知道:)谢谢! – Maroun 2013-05-04 12:47:02

相关问题