1

这是整体组合的定义。 http://en.wikipedia.org/wiki/Object_composition 这里是继承。 http://en.wikipedia.org/wiki/Inheritance_%28object-oriented_programming%29

我今天遇到一个问题,我无法解决。假设我们有一个关于我们将要构建的软件的软件计划。我的问题是,在什么情况下两个类之间存在的继承关系变成了组合?这听起来很奇怪,但我无法回答。提前致谢。

4

1 回答 1

0

组合(has-a)和继承(is-a)是两个截然不同的概念。然而,当is-a变成has-a时,存在一种特殊情况。考虑

class MyItemList publicly inherits Vector<MyItem>...

这是 MyItemList is-a Vector 的一个明显例子。它具有 Vector 的所有属性,可以用作MyItems的 Vector 。每个人都可以将 MyItemList 的实例用作 Vector。

现在考虑

class MyItemList privately inherits Vector<MyItem>...

MyItemList没有告诉任何人它是Vector。没有人可以将 MyItemList 用作 Vector。它具有 Vector ( has-a Vector ) 的所有属性,但不会告诉任何人。

这实际上是一种关系。唯一的区别是 MyItemList 不是通过属性/字段/成员来引用向量,而是通过this(或您的语言使用的任何自引用关键字)来引用向量。

当然,您选择的语言必须具有将继承声明为非公共的机制。

于 2014-10-23T17:00:21.023 回答