文章出處

繼承和組合都可以達到代碼復用的目的,但是組合比繼承更具靈活性。
組合是通過引用已有類(一般為抽象類)或接口來實現復用的組合在運行時通過多態可以動態替換被組合的對象。
繼承是通過以子類繼承父類方式來使父類的非私有成員可以被其子類使用。繼承在類編譯時就確定了繼承來的方法和

屬性,無法在運行時動態改變從父類繼承來的方法。如果繼承得來的某個方法在子類中不適用,這時就需要重寫該方

法。而這樣又很有可能違反LSP設計原則。如果父類非私有成員發生了改變那么繼承他的子類也不得不發生改變父類改

變。所以這種復用方式僅限于行為上的IS-A關系時才使用.

 

網絡的例子:

t:如果你要用到一個類中的所有方法但還想多幾個方法(你自己寫)一起用,你有什么方法實現,
s:一般我會直接繼承它,估計是答錯了,能否繼續把你的話說完。

t: 就單個實現來說沒有正確錯誤之分  
   
  你如果是用繼承來解決這個問題就是采用了高耦合的手段  
   
  也就是說子類B包含了超類A,子類B對超類A有強的依賴性  
繼續:  
  當B對A的依賴性是穩定的,用繼承不會有任何問題  
   
  但當B有變心,希望有一個長得象A,但是某些實現上與A有所不同的伙伴的話,由于是繼承就不行了。也就是A與B都

要重新定義  
   
  如果我們最初就發現了B比較花心,那就不用繼承,用聚合來完成  
  也就是B中包含A的實例變量,由B的構造函數傳入A的實例  
   
  那只要寫個A的子類A1  

  在實例B的時候傳入不同的A就行


不含病毒。www.avast.com
創作者介紹
創作者 互聯網 - 大數據 的頭像
AutoPoster

互聯網 - 大數據

AutoPoster 發表在 痞客邦 留言(0) 人氣( 0 )