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

方案重用:組合優於繼承的實務智慧

     編輯:Java 相關知識

重用的兩條路徑

  • 繼承:編譯期靜態綁定,是「是一種」關係;
  • 組合:執行期動態組合,是「有一個」關係。

組合的優勢

經典比喻:汽車「有一個」變速箱

class Car {
    private Transmission transmission; // 組合
    private Engine engine;
    // 執行期可換裝不同變速箱
}

若用繼承:class Car extends Transmission —— 荒謬且僵化。

新手常見誤區

「繼承應無處不在」

導致:深層繼承樹、脆弱基底類別、難以測試。正確心法:

  1. 先嘗試組合(private 成員物件);
  2. 若發現確實需要「是一種」關係與多型,再用繼承;
  3. 繼承應服務於介面契約,而非單純程式碼重用。

實務啟示

  • 設計新類別時,預設用組合;
  • 成員物件宣告 private,對外只暴露必要介面;
  • 需要多型替換時,成員型別用介面宣告(Transmission 而非 ManualTransmission)。

總結

組合提供更大的彈性、更好的封裝、更低的耦合。繼承是強力藥劑,用對地方是良藥,濫用則成毒藥。優先組合,謹慎繼承,是成熟物件導向設計師的標誌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性繼承組合
耦合度高(破壞封裝,父類別變動影響子類別)低(只依賴介面)
彈性編譯期固定執行期可動態替換成員物件
封裝性差(protected 成員外洩)好(成員通常 private,客戶端不可見)
複雜度易濫用導致深層繼承樹扁平、直觀