这与其他答案非常相似,但不同之处在于它不尝试实例化抽象类。
相似的三个答案都是用Composition来解决问题的。有人称它为外观,另一种适配器。我称之为代理。我不确定哪个(如果有的话)是正确的。这三个中的重要事实是我们使用组合而不是继承。
从创建接口开始。例如:
public interface iA
{
public void doA();
}
public interface iB
{
public void doB();
}
改变你的抽象类来实现这些接口
abstract class A implements iA
{
public void doA()
{
... blah ...
}
}
abstract class B implements iB
{
public void doB()
{
... blah ...
}
}
创建 A 和 B 的具体版本(这里我将其作为 C 的内部类),在 C 中实现这两个接口,并将 C 类的调用 doA() 和 doB() 代理到具体实现。
public class C implements iA, iB
{
private ConcreteA cA = new ConcreteA();
private ConcreteB cB = new ConcreteB();
public void doA()
{
cA.doA();
}
public void doB()
{
cB.doB();
}
private class ConcreteA extends A
{
public doA()
{
... blah ...
}
}
private class ConcreteB extends B
{
public doB()
{
... blah ...
}
}