首頁 >Java >java教程 >為什麼Java重寫成員變數時會出現變數隱藏?

為什麼Java重寫成員變數時會出現變數隱藏?

Linda Hamilton
Linda Hamilton原創
2024-12-20 20:02:10339瀏覽

Why Does Variable Hiding Occur When Overriding Member Variables in Java?

揭示 Java 中變數隱藏的細微差別

在探索 Java 中重寫成員函數的概念時,您冒險嘗試了重寫成員變數。為此,您製作了以下類別結構:

class A {
    public int intVal = 1;
}

class B extends A {
    public int intVal = 2;
}

class MainClass {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        A aRef;
        aRef = a;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
        aRef = b;
        System.out.println(aRef.intVal);
        aRef.identifyClass();
    }
}

執行此程式碼產生以下輸出:

1
I am class A
1
I am class B

您對為什麼aRef.intVal 即使在執行後仍保持1 表示困惑分配給B 類別的一個實例。要解開這個謎團,請理解在您呈現的場景中,您正在處理變數隱藏而不是重寫。

在 Java 中,超類別和子類別中可以有同名的變數。這種變數隱藏技術有效地隱藏了超類別變數。但是,這兩個變數繼續在各自的類別中獨立存在。

當您從超類別的引用存取變數時,您正在與超類別變數進行互動。引用本身不受它指向的物件的類別的影響。因此,即使 aRef 指向類別 B 的實例,它也會存取類別 A 中的 intVal 變量,因為那是 aRef 所屬的類別。

要從子類別 (B) 存取 intVal 變量,您需要可以使用 super 關鍵字,它引用超類別。這種方法可讓您區分超類別和子類別中具有相同名稱的變量,從而解決任何歧義。

以上是為什麼Java重寫成員變數時會出現變數隱藏?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn