使用超类引用的java转换

前端之家收集整理的这篇文章主要介绍了使用超类引用的java转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

假设Car和Bike是Vehicle的子类.

在我看来,像车辆v参考被投射到自行车.我知道这是非法的,事实上编译器吐出来……汽车无法投入自行车.

但这不应该是车辆不能投到自行车?毕竟,Vehicle v是车辆参考.

public class Test {
   public static void main(String[] args) {
       Vehicle v = new Car();
       Bike b = (Bike) v;
       // some stuff
    }   
}
最佳答案
错误消息说Car,因为这是运行时异常.由于此时它知道Vehicle引用所指向的实际实例(Car,Bike或Vehicle),因此它提供了更具体的错误消息.

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

猜你在找的Java相关文章