编程语言
首页 > 编程语言> > java – 为什么在下载时不会在编译时抛出classcastException?

java – 为什么在下载时不会在编译时抛出classcastException?

作者:互联网

考虑下面的例子. main(注释)的第5行在运行时抛出ClassCastException.
第4行是一个有效的演员,因为v1具有汽车的“知识”.同样,不应该第5行给出编译时错误,因为它有“知识v2”是车辆而不是汽车因此抛出编译时错误说“嘿,我不知道汽车,我是车辆,你不能被投入汽车”.

在编译期间,Vehicle v1 = new Car(),不会创建新的Car.但v1知道这是一辆车是正确的吗?

class Vehicle {
}

class Bus extends Vehicle {
}

class Car extends Vehicle {
}

public class UpcastDownCast {

    public static void main(String[] args) {
        Vehicle v1 = new Car(); // line 1
        Vehicle v2 = new Vehicle();// line 2
        // compile time error. Type mis-match
        Car c0 = v1; // line 3
        // v1 has knowledge of Car due to line 1
        Car c1 = (Car) v1;//line 4
        // Runtime Exception. v2 has no knowledge of car
        Car c2 = (Car) v2;//line 5

    }
}

解决方法:

Java不会传播这样的信息.一旦你说Vehicle v2 = new Vehicle(),Java就会忘记了什么v2不是“它的车辆或车辆的某个子类型”.

标签:java,casting,classcastexception,downcast
来源: https://codeday.me/bug/20190528/1174773.html