我有一个名为DE
的基本算法。它有2种实现的方法:a()
,b()
。我想测试此算法的变体,名为DEa
。因此,我正在做DEa extends DE
,并且我重写了方法a()
。还有另一个变体,算法DEb
。我正在做同样的事情,DEb extends DE
并覆盖b()
。现在,我要测试算法DEab
。这是问题所在。如果我写DEab extends DEa
,它将已经覆盖了方法a()
,但没有覆盖b()
,我将不得不从b()
复制DEb
,这很丑陋且难以维护。
代码示例:
class DE { int i; void a() { i = 1; } void b() { i++; } };
class DEa extends DE { void a() { i = 2; } };
class DEb extends DE { void b() { i--; } };
// class DEab extends DEa, DEb - can't write like this
class DEab extends DEa { void b() { i-- }; } // but this is copy-paste :c
我尝试使用
interface A
,interface B
和更高版本的DE implements A, B
,DEa extends DE
,DEb extends DE
...,这基本上是相同的问题:interface A { void a(); } // methods in interfaces must be abstract
interface B { void b(); }
class DE implements A, B { int i; void a() { i = 1; } void b() { i++; } };
class DEa extends DE { void a() { i = 2; } };
class DEb extends DE { void b() { i--; } };
class DEab extends // ... well it give me nothing
没有复制粘贴怎么办?
最佳答案
您可以使用此模式。
public interface A {
public void a();
}
public interface B {
public void b();
}
public class ABComposition implements A, B {
private A a;
private B b;
public ABComposition(A a, B b) {
this.a = a;
this.b = b;
}
@Override
public void a() {
a.a();
}
@Override
public void b() {
b.b();
}
}
关于java - 多重继承,组合功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17121538/