在探索 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中文網其他相關文章!