繼承是面向對象三大特性 (封裝、繼承、多態) 之一,實現代碼復用的核心手段。Java 中所有類隱式繼承 java.lang.Object,形成單根繼承樹。本文系統梳理繼承語法、權限規則、方法重寫/重載區別、super 用法及抽象類設計,助你構建清晰的類層次結構。
修飾符 class 子類 extends 父類 {
// 類體:字段、方法、構造器、內部類...
}
extends 關鍵字建立「is-a」關係:Dog extends Animal 即「狗是動物」。A→B→C)。public 或默認 (包可見);不可用 private/protected 修飾頂級類。| 父類成員修飾符 | 同包子類 | 不同包子類 | 說明 |
|---|---|---|---|
public | ✅ 可見 | ✅ 可見 | 完全公開 |
protected | ✅ 可見 | ✅ 可見 | 跨包仍可見 (僅限子類) |
| 默認 (package-private) | ✅ 可見 | ❌ 不可見 | 僅限同包 |
private | ❌ 不可見 | ❌ 不可見 | 封裝在父類內部 |

特殊規則:
super()。| 維度 | 重寫 | 重載 |
|---|---|---|
| 發生位置 | 子類 vs 父類 | 同一個類內部 |
| 方法名 | 必須相同 | 必須相同 |
| 參數列表 | 必須相同 | 必須不同 (類型/個數/順序) |
| 返回類型 | 相同或父類返回類型的子類 (協變返回) | 可不同,與重載無關 |
| 訪問權限 | 不能縮小 (≥ 父類) | 無限制 |
| 拋出異常 | 不能拋出更寬泛的檢查異常 | 無限制 |
| 綁定時機 | 運行期動態綁定 (多態核心) | 編譯期靜態綁定 |
public class Child extends Parent {
private String name = "Child";
public void print() {
// 1. 訪問父類字段 (解決遮蔽)
System.out.println(super.name); // 輸出父類 name
// 2. 調用父類方法
super.parentMethod();
// 3. 調用父類構造器 (必須在構造器首行)
public Child() {
super("parentArg"); // 顯式調用帶參構造器
}
}
}
限制:super 僅能在子類實例方法/構造器中使用;無法訪問父類 private 成員。
abstract class 不可實例化 (不能 new)。可以! 用於初始化父類字段,被子類構造器通過 super() 調用。甚至可被本類其他構造器 this() 調用。
public abstract class Animal {
protected String name;
public Animal(String name) { this.name = name; } // 供子類調用
public abstract void sound();
}
private,暴露 protected getter/setter 供子類用。Java 繼承通過 extends 實現單繼承,權限修飾符精細控制可見性,super 打通子父調用鏈,抽象類提供「半成品」契約。掌握重寫/重載區別、動態綁定機制,是寫出可擴展、可維護代碼的關鍵。記住:繼承是強耦合,慎用且善用。