我有一个类BaseClass
和一个类Subclass
,它派生自Baseclass
并重写它的一些方法。
public class BaseClass{}
public class SubClass extends BaseClass{
//override some methods
}
还有另一个类 SimpleBaseClass
,它派生自 BaseClass
并重写 BaseClass
的其他一些方法,因为与子类
public class SimpleBaseClass extends BaseClass{
//override some other methods
}
在某些情况下,我想将SubClass
的功能和特性赋予SimpleBaseClass
。最好做什么?在这种情况下有适用的模式吗?简单地说,我们可以创建一个派生自 SubClass
的新 SubSimpleBaseClass
,复制 SimpleBaseClass
的代码,这样就具有这两个类的功能: 子类
和SimpleBaseClass
。
public class SubSimpleBaseClass extends SubClass{
//do what SimpleBaseClass does
}
但通过这种方式,代码会在 SubSimpleBaseClass
中重复。避免这种情况的最佳方法是什么?也许组合
?在这种情况下,装饰器模式
是否是合适的解决方案?
最佳答案
不要使用类层次结构来重用功能。而是使用委托(delegate)模型,将 SubClass
和假设的 SubSimpleBaseClass
所需的功能重构到另一个类中。一个简单的例子:
interface Handler {
void foo();
}
public class BaseClass {
private final Handler handler; // constructor omitted
public void bar() {
handler.foo();
}
}
这允许您实现“多重继承”的轻型形式,您仍然可以通过多个类对 BaseClass
进行子类化,在这些类中您仍然可以实现 bar
的常见行为多个类(class)。这是common recommendation ,继承往往是over-used .
如果由于某种原因这是不可能的(您的示例不够详细,无法说明),请重构您的代码以使用实用程序方法。切勿复制和粘贴您的代码。这会增加维护成本。
关于java - 不允许多重继承时如何避免代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647758/