3

我一直在教 OOP,并试图向我的学生传达继承和创建两种类型之间的子类型关系之间的重要区别。例如,在 C++ 中,我可以使用私有继承来确保外部没有人看到子类型关系。

然而,虽然我可以想到很多我不想创建子类型关系的情况(例如,通过双向链表类实现堆栈),但我真的想不出我会想的好的设计示例实际上选择遵循继承而不创建公共子关系(而不是使用聚合)。

有什么好的例子吗?

4

3 回答 3

3

作为一名 Python 程序员,让我说这些事情太微妙了。它们似乎是纯粹的 C++ 主义。

在 Python 中,我们有继承,它会创建适当的子类型。

我们使用简单属性或可用集合进行组合。

私有继承作为一种组合的业务似乎只是令人困惑。而且基本上没用。

C++ 示例展示了使用公共接口创建组合的私有继承。在 Java 中,我们有一个通用接口。在 Python 中,我们有鸭子类型,不需要形式。

我不认为有很好的例子——我认为这个概念太微妙了,没有任何实际价值。

于 2008-11-01T03:14:40.300 回答
0

没有子类型的代码重用是使用委托完成的。

委托就是继承

于 2008-11-01T03:04:52.940 回答
0

在 javascript 中,您可以通过原型进行继承。我不会称之为子类型。由于javascript对象中没有类从其原型继承,但同时具有相同原型的对象彼此独立,可以演变为非常不同类型的对象。

于 2008-11-01T03:26:54.863 回答