Java 從語言層面提供兩種核心多態支撐:
final 方法外,子類可重寫父類實例方法,構建「is-a」層次結構interface 關鍵字將方法簽名與實現完全分離,實現「一個介面,多種實現」class Animal { void sound() { System.out.println("動物叫聲"); } }
class Dog extends Animal { @Override void sound() { System.out.println("汪汪"); } }
class Cat extends Animal { @Override void sound() { System.out.println("喵喵"); } }
Animal a = new Dog();
a.sound(); // 輸出「汪汪」——動態綁定
interface Payable { void pay(double amount); }
class Alipay implements Payable { public void pay(double a) { ... } }
class WechatPay implements Payable { public void pay(double a) { ... } }
void checkout(Payable p, double amt) { p.pay(amt); } // 僅依賴介面
介面變量可引用任何實現類對象,調用方零耦合具體實現。這是策略模式、依賴注入、插件架構的語言級基石。
| 維度 | 繼承/重寫 | 介面實現 |
|---|---|---|
| 關係 | is-a(泛化/專業化) | can-do(能力契約) |
| 代碼復用 | 強(繼承父類邏輯) | 無(僅定義簽名) |
| 耦合度 | 較高(依賴父類實現) | 極低(僅依賴介面) |
| 適用場景 | 核心領域模型、模板方法 | 跨層解耦、SPI、多實現切換 |