从多个类继承?

时间:2013-05-23 15:56:14

标签: java inheritance interface multiple-inheritance

我在Java中有以下接口和实现层次结构:

A <- B <- C

A_impl <- B_impl <- C_impl

其中A <- B表示B扩展AA_impl表示A等。

现在我想用B扩展D,同时用C扩展DE,换句话说:

A <- B <- C <-|
     <- D <-- E

D_impl延伸B_impl,但E_impl会延伸到什么? E_impl同时实现了CD,但我无法在Java中扩展C_implD_impl。那我该怎么办?

3 个答案:

答案 0 :(得分:0)

我看到了两个解决方案:

  1. 让D延伸C(反之亦然)。这样当E延伸D时它也延伸C.
    • 你的犹豫将看起来像A&lt; -B&lt; -c&lt; -D&lt; -E
  2. 使用接口而不是子类。
  3. 希望1工作没有太多的复杂情况。

答案 1 :(得分:0)

您不能在Java中进行多重继承,但可以使用多个接口。另一个很酷的解决方案是使用lomboks @Delegate而不是继承,为你想要扩展的一个或两个类使用lomboks @Delegate,它将以一种很酷,整洁的方式为你提供许多相同的功能。

http://projectlombok.org/features/Delegate.html

答案 2 :(得分:0)

我所看到的(如果我理解Q的权利),你的问题出现在E/E_impl那么你想做什么(impl省略):

 A <-  B <- C <---+         
       ^           \        
       |            - E     
       +----D <---+/        

解决方案1 ​​(跳过E界面)。

              (implements)  
 A <-  B <- C <|--+         
       ^           \        
       |            - E_impl (normal class)
       +----D <|--+/        
              (implements)  

通过这种方式,E_impl 类型的对象是 CD(当然也是AB)如果你真的想拥有一般/ abstract type E,参见解决方案2

解决方案2 (使用抽象类EA,您的E_impl扩展它)

               (implements)
 A <-  B <- C <|--+
       ^           \ 
       |            - EA(abstract class) <--(extends)--E_impl
       +----D <|--+/
              (implements)

在这种情况下,您的E_impl EA, C, D, B, A

我希望这能回答你的问题。

还要考虑 组合 是否可以解决您的问题。