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

Java 类型不匹配:无法从ASubClass转换为ASubClass,java,types,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 我的问题是,

当我有这些代码时:

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

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

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

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

在第二种情况下,您会得到一个编译错误,因为编译器知道您犯了错误(例如,您没有告诉他信任您)