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

Java 基礎核心難點深度解析:成員變量繼承、重載與重寫、多態與動態綁定

     編輯:Java 綜合教學

一、成員變量繼承機制

1.1 記憶體佈局真相

子類實例化時,JVM 先在堆中分配父類對象,再在其外層追加子類特有字段,形成完整子類對象。因此:

  • 子類擁有父類所有字段(含 private),但 private 字段不可直接訪問,需通過父類 public/protected 方法(getter/setter)間接操作。
  • 「子類只繼承非私有成員」是錯誤認知 —— 繼承的是擁有權,訪問權限由修飾符決定。

1.2 三類特殊字段繼承規則

字段類型子類是否擁有子類能否直接訪問備註
private 實例字段是否需父類暴露訪問器
static 字段是是(若非 private)屬於類,非實例;子類可隱藏但不可覆寫
被子類同名字段隱藏是是(訪問的是子類字段)通過 super.field 訪問父類字段

1.3 構造器鏈

  • 子類不繼承父類構造器。
  • 子類構造器首行隱式或顯式調用 super(...),否則編譯錯誤。
  • 若父類無無參構造器,子類必須顯式 super(參數)。

二、方法重載 vs 重寫

維度重載重寫
發生範圍同一類內部父子類之間
方法名相同相同
參數列表必須不同(類型/個數/順序)必須相同
返回類型可同可不同必須相同或為協變類型
訪問修飾符無限制子類不能縮小(如父 protected → 子 public)
拋出異常無限制子類不能拋出更寬泛的受檢異常
多態性質編譯期靜態綁定運行期動態綁定

三、多態與動態綁定

3.1 父類引用指向子類對象

Father father = new Child();  // 向上轉型
  • 可調用:父類聲明的所有非私有方法與字段。
  • 不可調用:子類新增的方法/字段(需向下轉型)。
  • 動態綁定規則:
      • 父類方法未被重寫 → 執行父類版本
      • 父類方法被重寫 → 執行子類版本(核心:動態分派)

3.2 字段無多態

class Father { int x = 1; }
class Child extends Father { int x = 2; }

Father f = new Child();
System.out.println(f.x);  // 輸出 1 —— 字段靜態綁定,看引用類型

結論:只有實例方法具備多態;字段、靜態方法、私有方法、構造器均為靜態綁定。

3.3 多態四要素總結

  1. 父類類型引用指向子類對象
  2. 引用只能調用父類定義的成員
  3. 重寫方法按對象實際類型動態分派
  4. 字段不可重寫,子類同名字段屬於隱藏

最佳實踐建議

  • 字段一律 private + getter/setter,避免隱藏混淆。
  • 重寫方法加 @Override,編譯器自動校驗簽名一致性。
  • 設計繼承體系時遵循「里氏替換原則」:子類應能無縫替換父類。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved