下面的代碼片段將導致運行時:的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