我有一个名为 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/