接口是 Java 實現功能擴展與系統解耦的核心機制。不同於單繼承的類層級結構,接口允許一個類實現多個接口,突破了單繼承的限制,是框架設計與模組化開發的基石。本文系統梳理接口的定義語法、核心特性、實現規則與實戰應用場景。
假設需要設計「帶橡皮擦的鉛筆」:
若用繼承,需讓「帶橡皮擦鉛筆」同時繼承「鉛筆」與「橡皮擦」,但 Java 不支持多重繼承。接口應運而生——類繼承單一父類,但可實現多個接口,靈活組合功能。
// 使用 interface 關鍵字
interface Eraser { // 橡皮擦接口
void erase(); // 抽象方法(默認 public abstract)
}
interface Pencil { // 鉛筆接口
void write();
}
// implements 關鍵字,可實現多個接口
class EraserPencil implements Pencil, Eraser {
@Override
public void write() {
System.out.println("鉛筆可以寫字");
}
@Override
public void erase() {
System.out.println("橡皮擦可以擦字");
}
}
public class InterfaceDemo {
public static void main(String[] args) {
EraserPencil ep = new EraserPencil();
ep.write(); // 輸出:鉛筆可以寫字
ep.erase(); // 輸出:橡皮擦可以擦字
}
}
| 特性 | 說明 |
|---|---|
| 特殊的類 | 可定義屬性與方法,但不可實例化 |
| 成員變量 | 隱式 public static final,即常量 |
| 成員方法 | 隱式 public abstract,即抽象方法 |
| 構造方法 | 無構造方法,不能創建對象 |
| 實現要求 | 非抽象類必須實現接口所有抽象方法 |
| 抽象類實現 | 可不實現方法,由其子類完成 |
| 接口繼承 | 接口可繼承多個接口:interface A extends B, C |
為類動態添加能力,如 Serializable、Cloneable、Comparable 等標記接口。
類與接口關係鬆散:類不實現接口也可獨立存在;實現接口僅為獲得特定能力。對比繼承的強耦合(子類離不開父類),接口實現「面向接口編程」,是 Spring 等框架 IOC/AOP 的理論基礎。
團隊協作中,接口定義統一契約(方法名、參數、返回值),不同開發者實現各自邏輯,保證系統整體一致性。如 DAO 層統一 add/delete/update/query 規範。
接口定義標準,抽象類提供默認實現,具體類完成業務Runnable、Serializable、Comparabledefault 方法提供默認實現,static 方法定義工具方法,減少破壞性變更接口是 Java 多態性的極致體現,掌握其設計哲學與工程實踐,能讓你構建出高內聚、低耦合、易擴展的企業級應用架構。