首頁 > Java > java教程 > Java 中的變數隱藏與函數重寫有何不同?

Java 中的變數隱藏與函數重寫有何不同?

Linda Hamilton
發布: 2024-12-17 08:12:25
原創
297 人瀏覽過

How Does Variable Hiding in Java Differ from Function Overriding?

理解Java 中的成員變數隱藏(重寫)

當子類別定義與其超類別中的成員變數同名的成員變數時,就會發生變數隱藏。與替換實現的函數覆蓋不同,變數隱藏使用同名的新變數來掩蓋超類別變數。

考慮以下 Java 程式碼:

public class A {
    public int intVal = 1;
    public void identifyClass() { System.out.println("I am class A"); }
}

public class B extends A {
    public int intVal = 2;
    public void identifyClass() { System.out.println("I am class B"); }
}

public 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
登入後複製

在此範例中,intVal 變數在 A 和B類別。 B的成員變數對A隱藏了1,導致當aRef設定為b時,存取的intVal值仍然是1,也就是A的intVal的預設值。

存取隱藏變數對於超類,我們可以使用 super.var 或 ((SuperClass)this).var。例如:

aRef = b;
System.out.println(aRef.intVal); // Outputs 1, the value of A's intVal
System.out.println(((A)aRef).intVal); // Outputs 2, the value of B's intVal
登入後複製

透過明確地將 aRef 轉換為其超類,我們可以存取隱藏的成員變數。

記住,變數隱藏允許子類別定義自己的同名變數超類別變量,但它不會完全覆蓋它們。兩個變數共存,子類別變數隱藏超類別變數。

以上是Java 中的變數隱藏與函數重寫有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板