【发布时间】:2019-10-06 14:52:10
【问题描述】:
我开始怀疑是否存在不能用组合代替继承的情况?
以一个简单的重载继承为例:
class Foo {
String getText() {
return "Text from foo";
}
}
class Bar extends Foo {
@Override
String getText() {
return "BAR> " + super.getText() + " <BAR";
}
}
这可以用这样的组合代替:
class Bar {
Foo foo;
String getText() {
return "BAR> " + foo.getText() + " <BAR";
}
}
...导致完全相同的结果。如果Foo 和Bar 都实现了相同的接口,则更明显的是上面的两个sn-ps 等同于相同的行为。
那么,回到最初的问题:是否存在必须(或真的、真的应该)使用继承而不是组合的情况?
【问题讨论】:
-
将问题标记为“java”和“语言不可知论”是没有意义的:已修复。
标签: oop inheritance language-agnostic composition