Java 基礎入門筆記(11):繼承機制、super/this、方法覆蓋與構造器鏈
1. 面向對象特徵二:繼承
定義
一個物件直接使用另一物件的屬性與方法。
好處
Java 繼承規則
- 單繼承:一個子類僅能有一個直接父類
- 不支援多重繼承(C++ 式),改以「多實現」(介面)替代,避免同名成員調用不確定性
- 支援多層繼承(C 繼承 B,B 繼承 A)
何時定義繼承
類之間存在「is-a」所屬關係時(xxx 是 yyy 的一種 → xxx extends yyy)。
2. this 與 super
this:本類物件引用,區分同名成員變量與區域變量
super:父類空間引用,區分子父類同名成員
- 用法相似,
super 專用於訪問父類成員
3. 方法覆蓋
兩大特性對比
| 特性 | 重載 | 覆蓋 |
| 位置 | 同一類內 | 子類中 |
| 關鍵字 | overload | override |
覆蓋注意事項
- 子類方法權限 ≥ 父類權限(父類 private 不構成覆蓋)
- static 僅能覆蓋 static
適用場景
子類需保留父類功能聲明,但實現特有邏輯時。
4. 構造器鏈與 super()
- 子類構造器第一行預設隱式
super(),調用父類無參構造器
- 子類實例化流程:
1. 載入類 → 2. 堆內存分配 → 3. 屬性默認初始化 → 4. 調用構造器 →
5. 先調用父類構造器 → 6. 子類屬性顯式初始化 → 7. 子類構造器邏輯 → 8. 賦值引用
- 父類無無參構造器時,子類必須用
super(參數) 顯式調用
super() 與 this() 均只能放第一行,二選一
5. 物件實例化完整流程圖解
Person p = new Person();
- JVM 讀取
Person.class,先載入父類
- 堆內存開闢空間,分配地址
- 屬性默認初始化
- 調用對應構造器
- 構造器首行
super() 調用父類構造器
- 父類初始化完成
- 子類屬性顯式初始化
- 子類構造器特定邏輯
- 地址賦值給引用變量
