我有一个类BaseClass
和一个类Subclass
,它派生自Baseclass
并覆盖它的某些方法。
public class BaseClass{}
public class SubClass extends BaseClass{
//override some methods
}
还有另一个类SimpleBaseClass
来自BaseClass
并覆盖了BaseClass
的其他一些方法,因为与SubClass
相比,它提供了不同的功能
public class SimpleBaseClass extends BaseClass{
//override some other methods
}
我想在某些情况下将SubClass
的功能和功能授予SimpleBaseClass
。最好的做法是什么?在这种情况下是否有适用的模式?虽然可以创建一个派生自SubSimpleBaseClass
的新SubClass
,但复制SimpleBaseClass
的代码并以这种方式具有两个类的功能:SubClass
和{{1 }}。
SimpleBaseClass
但是以这种方式代码在 public class SubSimpleBaseClass extends SubClass{
//do what SimpleBaseClass does
}
中重复。避免它的最佳方法是什么?也许SubSimpleBaseClass
?在这种情况下,Composition
是否适合作为解决方案?
答案 0 :(得分:5)
不要使用类层次结构来重用功能。而是使用委托模型,您可以将SubClass
和您假设的SubSimpleBaseClass
所需的功能重构为另一个类。一个简单的例子:
interface Handler {
void foo();
}
public class BaseClass {
private final Handler handler; // constructor omitted
public void bar() {
handler.foo();
}
}
这使您可以实现轻量级的多重继承"您仍然可以通过多个类继承BaseClass
,您仍然可以在多个类中实现bar
的公共行为。这是common recommendation,继承通常是over-used。
如果由于某种原因这是不可能的(您的示例不够详细,不能详细说明),而是重构您的代码以使用实用程序方法。切勿复制和粘贴您的代码。这会重复维护成本。