C++ 多重繼承因多類均有實現細節(狀態、方法體)導致菱形繼承、名稱衝突、構造順序等難題。Java 接口無實現細節、無狀態,合併多接口零衝突。
class ActionCharacter { public void fight() {} } // 具體類
interface CanFight { void fight(); }
interface CanSwim { void swim(); }
interface CanFly { void fly(); }
class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {
public void swim() {} public void fly() {}
// fight() 繼承自 ActionCharacter,無需重寫
}
extends 類必須在 implements 接口之前,否則編譯錯誤。fight())。
Hero h = new Hero(); t(h); // 當 CanFight 用 u(h); // 當 CanSwim 用 v(h); // 當 CanFly 用 w(h); // 當 ActionCharacter 用
同一對象按需「扮演」不同角色,零成本、類型安全。
優先用接口:
• 無方法實現/字段 → 必選接口
• 需多重實現組合 → 必選接口
只有「必須提供方法實現/非 final 字段」時,才考慮抽象類。
接口 = 抽象類優勢(防實例化、定義契約)+ 多重組合能力。是設計基礎類型的首選。