【发布时间】:2017-11-15 17:42:05
【问题描述】:
您好,我对继承有疑问。
让我们拥有这三个:
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 之外的其他方法。
这可能吗?
【问题讨论】:
-
“在运行时选择的实现”对我来说听起来像是策略模式。
-
或更一般地说,“composition over inheritance”。
-
为什么不直接使用策略或模板方法模式以及工厂模式?
-
同意标记空间。工厂方法模式可能是一种选择,但前提是 B 和 C 是具体类。战略听起来像是一个明智的解决方案。
-
@luk2302 我没有成功实施你的例子
标签: java inheritance design-patterns