1.4 實作複用
兩種方式:
- 實例化現有類別為物件使用。
- 在新類別中放入現有類別物件(組合 Composition 或 聚合 Aggregation)。
1.5 繼承:介面複用
繼承能複製現有類別並對「複製品」增修。修改後的「複製品」會反映原類別的變化。我們需要修改複製品嗎?
繼承代表基於基底型別與衍生型別概念的類別關係。基底型別包含所有衍生型別共享的特徵與行為。
透過繼承可:
- 對介面新增功能。
- 改變現有基底類別方法行為(覆寫 Overriding)。
1.5.1 is-a vs is-like-a 關係
- 純粹覆寫基底方法 → 完美替代 → is-a (如「圓是形狀」)。
- 新增介面元素 → 替代不完美 → is-like-a (如「熱泵類似冷卻系統」)。
1.6 多型:可互換物件
繼承產生許多相似物件,但這還不夠。多型是 OOP 自動挑選正確方法的機制。此階段無需知其如何運作。
- 非 OOP 編譯器:早期繫結,需絕對位址。
- OOP:執行期才能決定程式碼位址 → 晚期繫結。Java 用特殊程式碼取代絕對呼叫,根據物件儲存資訊計算方法位址 → 動態繫結。
向上轉型
衍生型別視為基底型別,實現多型基礎。
1.6.2 抽象基底類別與介面
abstract 類別:禁止建立實例。可宣告抽象方法(僅能在抽象類別中)。
interface:更進一步,嚴禁任何方法實作,純粹定義介面契約。