abstract 方法限制規則
abstract 表示「無方法體,強制子類實現」。以下三個修飾符與之語義衝突,編譯錯誤:
| 修飾符 | 衝突原因 | 代碼示例 |
| private | private 方法對子類不可見,無法被覆寫實現 | private abstract void foo(); // 編譯錯誤 |
| static | static 屬於類,不屬於實例;abstract 強制實例方法多態 | static abstract void foo(); // 編譯錯誤 |
| final | final 禁止覆寫;abstract 強制覆寫,互斥 | final abstract void foo(); // 編譯錯誤 |
抽象類與介面關鍵點補充
介面默認修飾符
- 字段:
public static final (常量)。
- 方法 (Java 8 前):
public abstract。
- Java 8+:允許
default / static / private 方法。
介面不能做的事
- 不能實例化 (無構造器)。
- 非抽象類實現介面必須實現所有抽象方法 (default 方法除外)。
抽象類設計最佳實踐
- 抽象類可包含構造器 (供子類
super() 調用)、非抽象方法 (模板方法模式)。
- 抽象方法僅聲明契約,不含實現;子類必須實現 (除非子類也是抽象類)。
- 善用
protected 抽象方法限制實現類可見性。
總結
abstract 與 private/static/final 互斥,因語義本質衝突。介面默認 public static final 字段與 public abstract 方法,Java 8 引入 default/static/private 方法增強演進能力。掌握這些規則,能避免低級編譯錯誤,設計出清晰可擴展的類層次。
- 上一篇文章: Java 同步機制深度對比:synchronized 同步塊/方法 vs volatile 變量,原理與選型指南
- 下一篇文章: Java 線程死鎖完整分析:定義、經典案例、排查工具與預防策略
Copyright ©
程式碼之家 All Rights Reserved