首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 「多重繼承」實現:接口組合 + 單類繼承的 Hero 模式

     編輯:Java 相關知識

為什麼 Java 無類多重繼承?

C++ 多重繼承因多類均有實現細節(狀態、方法體)導致菱形繼承、名稱衝突、構造順序等難題。Java 接口無實現細節、無狀態,合併多接口零衝突。

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,無需重寫
}

關鍵規則

  1. extends 類必須在 implements 接口之前,否則編譯錯誤。
  2. 2. 接口方法與繼承方法簽名衝突時,繼承方法自動滿足接口契約(如 fight())。
  3. 實現類可上溯造型至任一接口或基類。

上溯造型演示

Hero h = new Hero();
t(h); // 當 CanFight 用
u(h); // 當 CanSwim 用
v(h); // 當 CanFly 用
w(h); // 當 ActionCharacter 用

同一對象按需「扮演」不同角色,零成本、類型安全。

接口 vs 抽象類:選擇指南

優先用接口:
• 無方法實現/字段 → 必選接口
• 需多重實現組合 → 必選接口
只有「必須提供方法實現/非 final 字段」時,才考慮抽象類。

接口 = 抽象類優勢(防實例化、定義契約)+ 多重組合能力。是設計基礎類型的首選。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved