2013-07-24 85 views
8

有庫類B和C,都從類A繼承。我有2個類擴展B & C,即MyB & MyC。Java多繼承,擺脫重複代碼

A 
/\  
    B C 
/ \ 
MyB MyC 

MyB & MyC共享大量的公共代碼,它們只是略有不同。

我想擺脫重複的代碼,我怎麼能在java中做到這一點?在C++中有可能通過創建一個共同的基類,並把一切,這是常見的,如下所示:

A 
/\ 
    B C 
    \/
    MyBase 
/\ 
MyB MyC 
+0

檢查了這一點:http://stackoverflow.com/questions/17226364/java-alternative-to-multiple-inheritance – jsedano

回答

24

你可以使用composition

  • 創建一個新的類MyCommon與公共代碼
  • 在MyB和MyC中添加MyCommon的實例並將工作委託給MyCommon。
+1

嘎打我給它。 :) –

+1

也打我。 +1。 – Renan

+4

擊敗所有人...... ;-) – Thrakbad

1

一個類只能從一個類擴展。但是,您可以實現多個接口。

3

而不是在這些類中擁有所有的邏輯,而是擁有類D中的所有通用邏輯。現在讓它成爲MyCMyB,每個成員都是D的實例。這就是所謂的composition

1

在Java中,你會使用的東西線沿線的:

  1. 組成(圖形) 「在」 MyBase封裝的BC實例。

  2. 重構BC(如有必要),露出一個單獨的接口,說IBIC

  3. MyBase以實現多個接口:IBIC,通過「做正確的事」,以地圖的接口方法到內部BC實例。

  4. MyBMyC實現適當的接口,並將調用映射到MyBase