8

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

    A
   / \    
  B   C 
 /     \
MyB   MyC

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

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

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

4 回答 4

25

您可以使用组合

  • 使用通用代码创建一个新类 MyCommon
  • 在 MyB 和 MyC 中添加 MyCommon 的实例并将工作委托给 MyCommon。
于 2013-07-24T16:08:58.697 回答
3

与其在这些类中包含所有逻辑,不如在 class 中包含所有通用逻辑D。现在让它MyCMyB每个都有一个成员,它是D. 这叫作曲

于 2013-07-24T16:09:18.433 回答
1

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

于 2013-07-24T16:09:01.227 回答
1

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

  1. B组合(模式)来封装和C"in"的实例MyBase

  2. 重构BC(如有必要)公开一个单独的接口,比如IBIC

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

  4. MyBMyC实现适当的接口,并将调用映射到MyBase.

于 2013-07-24T16:11:38.920 回答