我在Java中有以下接口和实现层次结构:
A <- B <- C
A_impl <- B_impl <- C_impl
其中A <- B
表示B
扩展A
,A_impl
表示A
等。
现在我想用B
扩展D
,同时用C
扩展D
和E
,换句话说:
A <- B <- C <-|
<- D <-- E
我D_impl
延伸B_impl
,但E_impl
会延伸到什么? E_impl
同时实现了C
和D
,但我无法在Java中扩展C_impl
和D_impl
。那我该怎么办?
答案 0 :(得分:0)
我看到了两个解决方案:
希望1工作没有太多的复杂情况。
答案 1 :(得分:0)
您不能在Java中进行多重继承,但可以使用多个接口。另一个很酷的解决方案是使用lomboks @Delegate而不是继承,为你想要扩展的一个或两个类使用lomboks @Delegate,它将以一种很酷,整洁的方式为你提供许多相同的功能。
答案 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
类型的对象是 C
和D
(当然也是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
我希望这能回答你的问题。
还要考虑 组合 是否可以解决您的问题。