無需修改既有代碼即可添加新功能。多態是關鍵:框架代碼只依賴基類接口,新類型繼承基類自動融入體系。
class Instrument3 { void play() {} String what() {} void adjust() {} }
class Wind3 extends Instrument3 { ... }
class Brass3 extends Wind3 { void adjust() { println("Brass3.adjust()"); } }
class Woodwind3 extends Wind3 { ... }
static void tune(Instrument3 i) { i.play(); } // 永不修改
static void tuneAll(Instrument3[] e) { for (Instrument3 ins : e) tune(ins); }
Instrument3[] orchestra = { new Wind3(), new Percussion3(), new Stringed3(), new Brass3(), new Woodwind3() };
tuneAll(orchestra);
Electronic3 繼承 Instrument3 實現 play()。tune()/tuneAll() 完全不知情,依然正常工作。tune() 在獨立文件/已編譯 Jar 中,也無需重新編譯。「將發生改變的東西(具體樂器類型)與不變的東西(調音邏輯)分離。」
多態讓這種分離在語言級落地,是 OOP 管理複雜度的核心杠桿。