gpt4 book ai didi

java - 为什么在向下转换时在编译时不抛出 classcastException?

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:09 25 4
gpt4 key购买 nike

考虑下面的例子。 main(注释)的第 5 行在 Runtime 抛出 ClassCastException。第 4 行是有效的 cast,因为 v1 具有“关于汽车的知识”。同样,第 5 行不应该给出 编译时间 错误,因为它具有“关于汽车的知识” v2”是车辆而不是汽车,因此抛出编译时错误,说“嘿,我不了解汽车,我是车辆,你不能被转换为汽车”。

在编译期间,Vehicle v1 = new Car(),不会创建new 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 是什么的知识,除了“它是 Vehicle 或一些子类型车辆

关于java - 为什么在向下转换时在编译时不抛出 classcastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com