![面向对象的思考过程(原书第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/429/39980429/b_39980429.jpg)
上QQ阅读APP看书,第一时间看更新
1.11.1 抽象
就像继承一样,组合也是一种构建对象的机制。事实上,我想说只有两种方式来使用其他类构建新类,它们就是继承和组合。之前已经看到了,继承允许一个类继承另一个类。我们可以把属性和行为提取到通用类中。例如,狗和猫都是哺乳动物,因为狗是(is-a)哺乳动物,猫也是(is-a)哺乳动物。而使用组合,我们也可以把类嵌入到其他类中来构造新类。
我们可以拿车和引擎之间的关系来举例。把引擎从车中分离出来是明显可行的。我们可以单独构建引擎,把它用到各种车上,更别提还有其他优势。但我们不能说引擎是(is-a)一辆车。顺口说出来我们就觉得不对(因为我们在为真实世界的系统建模,这正是我们想要的效果)。我们最好用has-a术语来描述组合关系。车有(has-a)引擎。