Java组合如何工作?

时间:2013-10-07 21:28:42

标签: java

所以我一直在学习作文和继承。现在我理解继承是一种“is-a”类型的关系,而组合是一种“有一种”的关系。但这是否意味着一个组合只是指一个具有某种东西的对象(或领域)的类?

2 个答案:

答案 0 :(得分:1)

如果某个类可以扩展另一个类(继承),或者使用另一个类作为字段(组合),那就去组合,因为它允许您稍后更改实现,而不会影响使用您的类的任何代码。

如果不这样做,则永远将实现锁定为扩展类的子类。你这么做的时候,这很糟糕。

JDK中选择继承而不是组合的示例是Properties类,扩展 Hashtable,当所有需要使用Hashtable时在内部并实现合适的接口。这意味着您不能在自己的Properties类实现中替换,例如使用简单的匿名类。

JDK中有更多的例子,他们说得对,例如HashMap 使用一个Hashtable,但很容易被改为使用其他一些哈希 - 基于类而不影响其合同或API。

你应该始终努力使课程的实施变得灵活 见Liskov substitution principle

答案 1 :(得分:1)

基本上是的,但它有更多含义。

外部对象必须保护所包含的对象免受修改,以避免数据损坏。这通常是通过防御性副本创建来完成的。如果封闭的对象是不可变的,那么这不是必需的

其他含义是将封闭对象与对象API隔离,以便将来可能会更改。假设对象使用数组然后决定使用列表,通过禁止对内部对象的引用,外部可以在不破坏现有客户端的情况下更改实现。

您可以在“有效Java书”中查看章节:“首选组合而不是继承”,其中详细介绍了这些以及其他许多含义。