类型不匹配:无法从ASuperClass转换为ASubClass

Huy*_*han 1 java types

当我有这些代码时:

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
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第3行中的错误("ASuperClass不能转换为ASubClass")第3行是运行时错误但不是编译错误类似于第4行中的错误,这是一个编译错误.这背后的逻辑是什么?非常感谢!

Mar*_*oun 5

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

在第二种情况下,你得到一个编译错误,因为编译器知道你犯了一个错误(并且你没有告诉他通过施放来信任你).