向整个类树添加功能。多重继承?

时间:2014-04-30 12:55:01

标签: oop object-oriented-analysis

我有一个面向对象的设计问题。在我正在使用的库中内置了一个类的树,所以我无法修改。我们称之为A - > B - > C.(其中B继承自A和C继承自B)。

我希望通过一些额外的独立功能扩展A.这很简单,我将A扩展到A'并添加我的功能。但是,我希望B和C继承这个附加功能。

到目前为止,我能够做到这一点的唯一方法是扩展B - > B'和C - > C'并将附加功能复制粘贴到B'和C'。这显然远非理想。是否有标准的设计解决方案?

由于

威尔

N.B。如果这是相关的,我用Java编码。

1 个答案:

答案 0 :(得分:1)

看起来你真的可以在这里使用多重继承,这在Java中显然是不可能的。

我不知道您要添加的功能究竟是什么,但您可能通过使用接口来解决此问题。例如,您可以使A'成为一个界面,它定义了您需要的一些功能,然后B'扩展B并实施A'。这再次远非理想,但它给人的是多重继承的印象。

不幸的是,你不能在接口中指定方法体,所以再次你必须复制粘贴。

我想写一个单独的课程X,其中包含您需要的其他功能,然后B'延长BC'延长C就像你现在一样,只需在这些类中使用X

class B' extends B {
   private X x;

   /* rest of the class */
   ...
   void someMethod() {
      ...
      x.additionalFunctionality();
      ...
   }
   ...
}

或使附加功能静态并静态调用。

这样您就不必复制粘贴,只需重复使用类X即可。但是,如果您不依赖于使用原始类的内部字段,则此方法有效。

我希望这至少可以帮助你。这是一个非常具有挑战性的问题。