【问题标题】:Java Multiple inheritance, get rid of duplicate codeJava多重继承,摆脱重复代码
【发布时间】:2013-07-24 05:50:01
【问题描述】:

有库类 B 和 C,都继承自类 A。我有 2 个扩展 B 和 C 的类,即 MyB 和 MyC。

    A
   / \    
  B   C 
 /     \
MyB   MyC

MyB 和MyC 共享许多通用代码,它们只是略有不同。

我想摆脱重复的代码,我该如何在 java 中做到这一点?在 C++ 中,可以通过创建一个通用的基类并将所有通用的内容放入其中,如下所示:

    A
   / \  
  B   C 
   \ /
  MyBase
   / \
 MyB MyC

【问题讨论】:

标签: java multiple-inheritance


【解决方案1】:

在 Java 中,您将使用以下内容:

  1. 用于封装B 和C“in”MyBase 实例的组合(模式)。

  2. 重构 B 和 C(如有必要)以公开单独的接口,例如 IB 和 IC

  3. MyBase 实现多个接口:IB 和 IC,通过“做正确的事情”将接口上的方法映射到内部 B 和 C 实例。

  4. MyB 和 MyC 实现适当的接口,并将调用映射到 MyBase。

【讨论】:

    【解决方案2】:

    不要在这些类中包含所有逻辑,而是在类D 中包含所有通用逻辑。现在让MyC 和MyB 都有一个成员是D 的实例。那叫composition。

    【讨论】:

      【解决方案3】:

      一个类只能从一个类扩展。但是,您可以实现多个接口。

      【讨论】:

        【解决方案4】:

        你可以使用composition:

        • 使用通用代码创建一个新类 MyCommon
        • 在 MyB 和 MyC 中添加 MyCommon 的实例,并将工作委托给 MyCommon。

        【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 2016-01-08
        • 1970-01-01
        • 2012-04-11
        相关资源
        最近更新 更多