如何在继承和构成之间进行选择?

问题描述 投票:1回答:3

我正在研究继承与构成之间的区别。每个人都称赞组成优于继承,所以问题是我们如何做出选择?另外,如果我们根本不使用继承,那么按照OOP主体,我们会错过什么?

java oop inheritance composition
3个回答
0
投票

这实际上取决于数据的结构。继承用于“是”关系,而组合用于“有”关系。

例如,如果您正在看汽车。

继承:您将在“汽车”下使用“丰田”,“本田”,“宝马”,因为它们是汽车的类型。

组成:您将在“汽车”下使用“引擎”,“车轮”,“门”,因为它们是构成汽车的零件。

'Toyota','Honda','BMW'不是汽车的一部分,而'Engine','Wheels','Door'不是汽车类型。


0
投票

这是一个复杂的大话题,也许在一些SO帖子中无法描述。继承可能很棘手,人们对此做了博士学位论文。在大多数情况下,编写新代码时,我会将继承保持在最低水平。

当您的Dog类继承哺乳动物时,哺乳动物的所有状态/行为都必须仍然适用。(狗是哺乳动物)。鸭嘴兽是哺乳动物吗?生物学是的,但可能不适用于您的需求。特别是当您遇到易变的对象时混乱的情况,例如https://en.wikipedia.org/wiki/Circle%E2%80%93ellipse_problem#Description[在现实生活中,父母和孩子之间经常会有愚蠢的耦合。


0
投票
您不能说应该优先于另一个。这取决于数据的结构方式以及特定数据模型所需的表示形式。有一种简单的方法来记住要使用的内容:
© www.soinside.com 2019 - 2024. All rights reserved.