我正在使用2个库,我需要一个库中的一个类来实现另一个库的功能。我的第一个尝试是获取库A的源代码并使类从库B扩展该类。除了很多修复等没有使代码完全稳定等以及更新其中一个库之后,它的工作方式很好。地狱。
像这样:abstract class classA extends classB{
}
现在我也想过做这样的事情:
abstract class newClass extends classB{
private classA A = new classA();
public void exampleMethod(){
A.exampleMethod();
}
}
第二种选择是否表现不佳?如果是的话,有多糟糕?
答案 0 :(得分:2)
嗯,GoF书第一章中的Erich Gamma说:“赞成对象构成超过类继承”。请参阅:http://www.artima.com/lejava/articles/designprinciples4.html。
答案 1 :(得分:2)
由于各种原因,通过委托表格(mixin)的扩展是可取的,但最相关的是你(可能)以非规范的方式扩展第三方图书馆类。
但这都是猜测,因为我们不知道你在谈论什么库。例如,它可能是一个写得不好的库,classA
(使用你的例子)实际上不应该被扩展,但是作者忽略了规范final class classA
等等。如果是这样的话,那么显然你不想扩展那个类(即使你可以)。
所有这一切,鉴于您(a)只需要共享功能,(b)不需要多态语义,委托表单非常有意义。
关于表现焦虑的建议:基准测试。
不要忽视最终决定 - JIT是你的朋友(对它好一点并喂它):
final private classA A = new classA();