首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类包含与类继承

类包含与类继承
EN

Stack Overflow用户
提问于 2015-09-04 16:59:44
回答 3查看 771关注 0票数 1

我发现了一个问题,询问类包含和类继承之间的区别。类包含到底是什么意思?我想我以前没听过这个词。

EN

回答 3

Stack Overflow用户

发布于 2015-09-04 17:03:47

这是一个构图。一般来说,比起继承,更喜欢组合。使用继承来建模只是一种关系(Liskov原则),而不是使用、依赖或在术语中实现。

票数 2
EN

Stack Overflow用户

发布于 2015-09-05 00:30:06

从"is-a“和"has-a”(组合和继承)的角度来思考你的问题。请看一下:Is-aHas-a

简而言之,如果你试图实现的类/对象是更一般的东西的一个实例,那么它就是一个继承的例子,例如: Apple (派生类)是一个Fruit (基类),Porsche是一辆汽车等等。

如果你的对象“有”或者“是某物的一部分”,那么它就是组合。例如:汽车有一个引擎(引擎的对象包含在每个汽车对象中),房子有窗户和门等。

您是否应该使用一个或另一个是一个不同类型的讨论的主题。通常,相对于继承,您更喜欢组合,因为这样可以获得更灵活的代码。

票数 2
EN

Stack Overflow用户

发布于 2015-09-05 05:51:40

根据上下文的不同,包含可能有不同的处理方式:

  • InstanceOf/TypeOf关系描述实例与其类之间的关系。在数学中,它是成员关系(一个成员包含在它的集合中)。在关系模型中,元组是关系的成员。类之间的
  • General-specific关系。在数学上,它是子集关系,这意味着更具体的集合的所有成员也是其更一般的集合的成员。中的对象包含(如JavaScript)。
  • Object inclusion In (如JavaScript)。在这里,一个对象包含在它的原型对象中。但是,请注意,它不是类的包含,继承的实现方式也不同。
  • Concept inclusion面向概念的编程中,概念泛化类,而包含泛化继承。特别是,对象可以共享一个超对象,就像类可以共享一个超类一样。
  • Composition.它实际上是一个不同的关系--而不是包含。然而,在这个假设下,它可以被视为包含:组合对象/类是一个比它拥有的元素更具体的元素。这一假设是面向概念模型的特征之一。这是一个非常自然的假设,它允许我们使用组合进行继承。它的一个优点是,一个超级对象可以有许多扩展。
  • Containment relation。它通常用于描述实例是如何包含在容器对象(如Bad,Set等)
  • 内部类中的。

所有形式的包含与继承在概念上的主要区别之一是,包含假设许多元素可以包含在实例级别的一个(父)元素中。相比之下,经典继承(隐式)假设一个对象只能有一个扩展。换句话说,一个超对象不能在许多扩展之间共享。

再次注意,这可能不是一个完整的列表,并且上述处理之间存在显着重叠以及一些不兼容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32394062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档