多型是 Java 的核心機制,術語稱為動態綁定或執行期綁定。它依賴繼承體系,允許將物件視為其自身型別或基底型別處理。多型讓同一基底型別的不同衍生類別展現不同行為,這種差異透過方法行為體現。
消除型別之間的耦合關係。
程式碼針對抽象基底型別撰寫,具體實作可自由替換擴充,符合開放封閉原則。
| 綁定類型 | 別名 | 發生時機 | 適用對象 |
|---|---|---|---|
| 靜態綁定 | 早期綁定 | 編譯期 | static 方法、final 方法、private 方法、建構子 |
| 動態綁定 | 晚期綁定 | 執行期 | 一般實例方法(預設) |
static、final、private 方法與建構子外,所有方法預設為動態綁定class Instrument {
public void play() { System.out.println("Instrument.play()"); }
}
class Wind extends Instrument {
@Override
public void play() { System.out.println("Wind.play()"); }
}
class Stringed extends Instrument {
@Override
public void play() { System.out.println("Stringed.play()"); }
}
public class Music {
// 針對基底型別程式設計
public static void tune(Instrument i) {
i.play(); // 動態綁定:執行期決定呼叫哪個 play()
}
public static void main(String[] args) {
tune(new Wind()); // 輸出:Wind.play()
tune(new Stringed()); // 輸出:Stringed.play()
// 新增 Percussion 類別繼承 Instrument,tune() 完全不需修改
}
}
super.field 與 this.field 取決於宣告型別,非物件實際型別if-else/switch 型別判斷程式碼