Father father = new Son(); // 自動發生,安全無風險
Father f = new Father();
if (f instanceof Son) { // 必須守護
Son son = (Son) f; // 安全轉型
}
instanceof 判斷,否則拋 ClassCastException問題:Father f = new Son(); f.test(); 編譯器如何知道調用 Son.test()?


public class Base {
public void test() { System.out.println("in Base"); }
public void print() {}
}
public class Derive extends Base {
@Override
public void test() { System.out.println("in Derive"); }
public void sayHello() {}
}
public static void main(String[] args) {
Base b = new Derive();
b.test(); // 輸出 "in Derive"
}
方法表中 test() 索引 1 在 Base 和 Derive 中位置固定,Derive 覆蓋版本覆寫該槽位,實現運行期分派。