下面的代码片段将导致运行时:的Java铸造导致运行时错误而不是编译错误
class Vehicle {
public void printSound() {
System.out.print("vehicle");
}
}
class Car extends Vehicle {
public void printSound() {
System.out.print("car");
}
}
class Bike extends Vehicle {
public void printSound() {
System.out.print("bike");
}
}
public class Test {
public static void main(String[] args) {
Vehicle v = new Car();
Bike b = (Bike) v;
v.printSound();
b.printSound();
}
}
我的问题是:为什么是导致运行时错误,但不编译错误?编译器是否应该知道'v'已经是'Car'并且不能被转换成'Bike'?
不错,简单的解释。以供将来参考JLS SE8 https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html – georger