| 特性 | 抽象類別 | 介面 |
|---|---|---|
| 關鍵字 | abstract class | interface |
| 可否實例化 | 否 | 否 |
| 可包含欄位 | 是 | 否 (C# 8.0 前) |
| 可包含建構函式 | 是 | 否 |
| 可包含實作方法 | 是 | C# 8.0+ 可含預設實作 |
| 繼承限制 | 單一繼承 | 可多重實作 |
| 存取修飾詞 | 任意 | 預設 public,不可私有 |
sealed;介面本質上不可被繼承只能被實作。virtual;介面實作方法預設為 non-virtual (除非明確標記)。飛機會飛,鳥會飛 → 共同實作
IFlyable介面。
F-22 屬於戰機 → 繼承FighterJet抽象類別。
鴿子屬於鳥類 → 繼承Bird抽象類別。
門 (抽象類別):定義「是門」的本質 (開關、鎖孔),不可實例化,只能具體化為鐵門、木門。
鎖 (介面):定義「能上鎖」行為,門可選擇裝鎖、裝門鈴 (多重實作)。
單一職責:鎖只負責鎖,別要求它發聲 (介面污染)。
需要多版本控管、共享實作邏輯、關係緊密的型別層級 → 抽象類別
需要跨不相關型別提供通用行為、輕量契約、多重實作 → 介面
IReadable、IWritable、IDeletable 等細粒度介面。抽象類別與介面並非二選一,而是互補關係:抽象類別處理「垂直」的層級共享,介面處理「水平」的行為契約。理解兩者語意差異,配合 SOLID 原則,才能設計出可維護、可擴充的物件導向架構。