void doStuff(Shape s) {
s.erase();
s.draw(); // s 可能是 Circle、Square、Line...
}
編譯期 doStuff 不知道 s 具體型別,但執行時總能正確呼叫對應的 draw()。這就是多型,其底層機制稱為動態繫結。
private/static/final 方法)。C++ 需 virtual 關鍵字啟用,Java 則所有非 private/non-static/non-final 方法預設都是虛擬的。編譯器與 JVM 協作完成:
Shape)中;Circle)的實作。Circle c = new Circle();
doStuff(c); // Circle → Shape(向上轉型)
// doStuff 內呼叫 s.draw() → 動態繫結至 Circle.draw()
向上轉型讓程式碼只依賴基底型別介面,動態繫結確保具體行為正確執行。這是「介面導向設計」的運作基礎。
Triangle 時,doStuff 完全不用修改;動態繫結是 Java 多型的引擎。它將「呼叫什麼方法」與「執行哪個實作」分離,賦予程式極大的彈性與擴充性。Java 讓這機制成為預設行為,讓開發者自然地寫出多型程式碼。