使用超类引用的java转换

m0t*_*way 5 java casting

有人能解释一下这里发生了什么吗?

假设Car并且Bike是子类Vehicle.

它看起来像Vehicle v参考被投射到一个Bike.我知道这是非法的,确实是编译器吐出来的... Car cannot be cast to Bike.

但这不应该是Vehicle不能投的Bike吗?毕竟,Vehicle v是一个Vehicle参考.

public class Test {
   public static void main(String[] args) {
       Vehicle v = new Car();
       Bike b = (Bike) v;
       // some stuff
    }   
}
Run Code Online (Sandbox Code Playgroud)

Sac*_*kar 3

错误消息显示Car因为这是运行时异常。由于此时它知道车辆引用指向的实际实例(汽车、自行车或车辆),因此它会给出更具体的错误消息。

如果这是编译时的一些异常,编译器会提到Vehicle,因为编译器可能不知道车辆引用指向的实际实例。