class Animal {
public int b = 0;
public static int A = 0;
public static void method() { System.out.println("動物"); }
public void voice() { System.out.println("動物叫"); }
}
class Cat extends Animal {
public int b = 4;
public static int A = 4;
public static void method() { System.out.println("貓"); }
public void voice() { System.out.println("貓叫"); }
}
class Dog extends Animal {
public int b = 3;
public static int A = 3;
public static void method() { System.out.println("狗"); }
public void voice() { System.out.println("狗叫"); }
}
public class RunTime {
public static void main(String[] args) {
Animal a = new Cat();
System.out.println(a.A); // 0 → 靜態欄位隱藏,依宣告型別 Animal
System.out.println(a.b); // 0 → 實例欄位隱藏,依宣告型別 Animal
a.voice(); // 貓叫 → 實例方法覆寫,RTTI 解析為 Cat
a.method(); // 動物 → 靜態方法隱藏,依宣告型別 Animal
}
}
0 0 貓叫 動物
a.A、a.b、a.method() 皆為隱藏,編譯期綁定 Animal 版本。a.voice() 為覆寫,執行期綁定實際物件 Cat 版本。此例清楚驗證:RTTI 僅作用於覆寫,不作用於隱藏。