interface 關鍵字)Java 介面僅宣告方法特徵,無實作;方法特徵不含回傳類型、參數名、拋出異常。編譯器依此判斷多載;覆寫時進一步檢查回傳類型與異常。
| 特性 | 介面 | 抽象類 | 具體類 |
|---|---|---|---|
| 實作 | 無 (Java 8 前) | 部分 | 完整 |
| 繼承 | 多實作 (implements) | 單繼承 (extends) | 單繼承 |
| 建構子 | 無 | 有 | 有 |
| 欄位 | public static final | 任意 | 任意 |
| 方法 | public abstract (預設) | 任意 | 任意 |
| 抽象層級 | 最高 | 中 | 無 |
兩個類別提供相似功能,調用方需動態切換實作。若用抽象父類,受限於單繼承,若具體類已有父類,則需向上修改整個繼承樹 → 災難性耦合。
public interface ActionListener {
void actionPerformed(ActionEvent e);
}
e -> handle(e)public interface Serializable { } // 無方法、無欄位
public interface Cloneable { }
@Annotation) 替代public interface Constants { int MAX = 100; } // 不推薦
class MyClass implements Constants { ... } // 濫用實作關係
public final class Constants { private Constants(){} public static final int MAX=100; } 或 enum型別安全定義:合法 Java 程式運行期不會發生型別錯誤,變數永不被誤視為其他型別處理。
default 方法兼容擴展介面,謹慎使用