首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 成員變數隱藏機制解析:父子類同名字段訪問差異示例

     編輯:程式設計綜合問答

現象代碼

class A { public int a = 3; public String show() { return "父類:a=" + a; } }
class B extends A { public int a = 5; public String show() { return "子類:a=" + a; } }

public class Test {
    public static void main(String[] args) {
        A a = new B();
        B b = (B) a;
        System.out.println(a.a); // 3
        System.out.println(b.a); // 5
        System.out.println(a.show()); // 子類:a=5
        System.out.println(b.show()); // 子類:a=5
    }
}

核心解釋:成員變數隱藏 vs 方法覆寫

  • 變數隱藏:子類宣告同名字段 a,並非覆寫,而是遮蔽父類字段。編譯期靜態綁定,根據引用型別決定訪問哪個 a。
    • a.a:引用型別為 A,訪問父類 a=3。
    • b.a:引用型別為 B,訪問子類 a=5。
  • 方法覆寫:show() 為實例方法,**運行期動態分派**,根據物件實際型別(此處為 B)調用子類實現,故均輸出 子類:a=5。

記憶口訣

「變數看引用,方法看物件」。

最佳實踐

  1. 避免父子類同名字段,造成閱讀困惑。
  2. 若需區分,父類字段用 private 封裝,提供 getter/setter,子類另行定義。
  3. 使用 @Override 註解確保方法確實覆寫,編譯器會檢查簽名一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved