Java多重继承,摆脱重复的代码

Java Multiple inheritance, get rid of duplicate code

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

1
2
3
4
5
    A
   / \    
  B   C
 /     \
MyB   MyC

MyBMyC共享许多公共代码,它们只是略有不同。

我想去掉重复的代码,我怎样才能在Java中做到这一点呢?在C++中,可以创建一个公共基类,并把它中常见的东西放在下面:

1
2
3
4
5
6
7
    A
   / \  
  B   C
   \ /
  MyBase
   / \
 MyB MyC


你可以用作文:

  • 用公共代码创建一个新的类mycommon
  • 在myb和myc中添加一个mycommon实例,并将工作委托给mycommon。


不要将所有逻辑都包含在这些类中,而是在类D中拥有所有公共逻辑。现在,让MyCMyB各自拥有一个属于D实例的成员。那叫做合成。


在爪哇,你会用到一些东西:

  • BC的实例封装在"MyBase中的复合(模式)。

  • 重构BC(如有必要)以公开单独的接口,如IBIC

  • MyBase实现多个接口:IBIC,通过"做正确的事情"将接口上的方法映射到内部BC实例。

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


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