2013-07-24 84 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