首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 方法覆寫與隱藏的 RTTI 差異實證分析

     編輯:Java 程式設計入門

核心結論

  • 覆寫:動態繫結,受 RTTI(Run-Time Type Identification) 控制。父類別參考指向子物件時,呼叫子類別覆寫方法。
  • 隱藏:靜態繫結,不受 RTTI 影響。靜態方法、欄位依宣告型別決定存取版本。

實證程式碼

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 僅作用於覆寫,不作用於隱藏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved