抽象類解決 「部分實現共享 + 部分行為強制子類定制」 的矛盾。
abstract,**強制子類實現**;同時保留可復用的具體方法(模板方法模式)。public abstract class InputStream {
// 子類必須實現:讀取單字節
public abstract int read() throws IOException;
// 模板方法:複用邏輯(讀字節數組)
public int read(byte[] b) throws IOException { ... }
public int read(byte[] b, int off, int len) throws IOException { ... }
// 其他輔助方法...
}
所有流(文件、網絡、內存、壓縮)繼承 `InputStream`,只需實現 `read()`,其餘批量讀取邏輯自動復用。
| 特性 | 抽象類 | 接口 |
|---|---|---|
| 構造器 | 有(子類調用 super()) | 無 |
| 字段狀態 | 可有實例字段 | 僅常量 |
| 方法實現 | 可混合抽象/具體 | 默認方法/靜態方法 |
| 繼承關係 | 單繼承 | 多實現 |
| 適用場景 | 「是一種」強關聯、共享狀態/邏輯 | 「能做什麼」能力定義、多態解耦 |
抽象類是**不完整的類**,封裝「不變的骨架」,留出「變化的洞」(抽象方法),引導子類填補,實現**受控的擴展**。