在掌握了 Java 繼承機制後,我們來探討另一個核心概念——抽象類別。這是物件導向設計中實現「介面與實作分離」的關鍵機制。
我們先前學過,將事物的屬性與方法封裝成類別。例如建立一個 Person 類別,包含 name、sex 等屬性與 sleep() 方法。但這樣做有一個問題:我們將「人」這個概念過早具體化了——姓名設為「TianYiLuo」、性別設為「男」、睡覺方式寫死為「橫著睡」。這違背了抽象的初衷:應該只定義「有哪些行為」,而不定義「具體如何執行」。

抽象類別使用 abstract 關鍵字修飾,主要特徵如下:

抽象類別定義了「契約」,具體子類別負責「履約」。以 Person 為例,定義 sleep()、eat() 兩個抽象方法;Student、Worker、Teacher 等子類別繼承 Person 並實作這些方法。同樣是「睡覺」,學生可能「趴著睡」、工人可能「躺著睡」、教師可能「坐著睡」——行為本質相同,具體形式各異。


覆寫父類別方法時,權限修飾符遵循「高可覆蓋低,低不可覆蓋高」原則:
public > protected > default(package-private) > private
若父類別方法是 public,子類別覆寫時只能用 public;若子類別嘗試用 default 覆寫 public,編譯器將報錯。

掌握抽象類別,是通往設計模式與框架原理的必經之路。下一篇我們將探討介面與抽象類別的差異與選擇策略。