您好我的遗产问题。
让我们来看看这三个:
A
/ \
/ \
B C
\ /
\ /
?
|
D
abstract class A {
public abstract void print();
public abstract int getInt();
}
abstract class B extends A {
@Override
public int getInt() {
return 5;
}
}
abstract class C extends A {
@Override
public int getInt() {
return 1;
}
}
class D extends B || C {
@Override
public void print() {
console.log(this.getInt());
}
}
我想添加一个可以从B或C中脱颖而出的D类。
当我创建一个新的D()时,我可以选择父级。我不想使用多重继承(java也不能这样做),我想通过改变父类的实现来使用一种方法在类上添加特定的comportment。
实际上 D 应该来自 A ,但是我可以在运行时选择 B或C 的特殊实现。我们可以认为B和C不允许实现除A之外的其他方法。
可能吗?
答案 0 :(得分:0)
C ++具有多重继承,并且在设计Java时,不是引入多继承 interfaces ,而是提供代码替代,并防止歧义和其他多重继承问题。
可以使用委派,然后解决正确的多次调用的策略与该类一起使用。
class D extends A {
B b;
C c;
@Override
public int getInt() {
return b.getInt() + c.getInt();
}
...
}
class D extends A {
A delegatee;
public final void iAmReally(A a) {
delegatee = a;
}
@Override
public int getInt() {
return delegatee.getInt();
}
...
}