1

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

A <- B <- C

A_impl <- B_impl <- C_impl

其中A <- B手段B扩展AA_impl实现A等。

现在我想扩展Bwith D,同时扩展Cand Dwith E,换句话说:

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

我有D_implextends B_impl,但应该E_impl扩展什么?E_impl实现了两者CD但我不能在 Java 中扩展C_impl两者。D_impl所以我该怎么做?

4

3 回答 3

0

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

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

于 2013-05-23T16:08:30.637 回答
0

我看到了 2 个解决方案:

  1. 让 D 扩展 C(反之亦然)。这样,当 E 扩展 D 时,它也在扩展 C。
    • 您的犹豫将看起来像 A <- B <- C <- D <- E
  2. 使用接口而不是子类。

希望 1 的作品不会造成太多的并发症。

于 2013-05-23T16:00:26.053 回答
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 是 a CD(当然 AB 也是)如果您真的想要一个通用/抽象类型E,请参见解决方案 2

解决方案2 (使用抽象类EAE_impl扩展它)

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

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

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

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

于 2013-05-23T16:21:23.913 回答