面向对象编程中,为什么多态是关键思想?

3
在C++ Primer这本书中,作者写道:“面向对象编程的关键思想是多态性”。我不确定我理解作者的意思。那么其他重要的东西呢:抽象、继承等等。请有经验的人详细解释一下。
编辑: 我不是在问“什么是多态性”。我在问“为什么多态性是面向对象编程的关键?为什么不是继承?”

1
http://en.wikipedia.org/wiki/Polymorphism_(computer_science) - kofemann
也许是因为你不需要继承来实现面向对象编程。看看混合和特质。 - Raynos
维基百科不同意你的观点:“Mixin与抽象基类是同义词。从Mixin继承不是一种特化形式”。你想反驳这个吗? - duffymo
这篇关于特质的论文说:“特质是一种简单的组合模型,扩展了单继承”。Raynos,您想解释一下吗?http://scg.unibe.ch/archive/phd/schaerli-phd.pdf - duffymo
3个回答

2

我不确定这是面向对象编程的关键。那只是某些人的看法。

我认为有四个关键:抽象数据类型、封装、继承和多态。它们是相互关联的。

每个想法都依赖于之前的想法。ADT是唯一能够独立存在的。封装需要ADT。多态需要继承。

多态有助于消除if、switch和case语句。您不必根据对象类型编写代码来确定要执行的操作;虚拟表格只需在幕后调用正确的方法即可。


多态不需要继承。 - Raynos
能否详细说明一下,Raynos? - grandouassou
是的,请详细说明。我一直认为多态性需要一个基本静态类型才能在运行时选择多态类型。如果您已经对此答案投了反对票,请解释或撤回反对票。 - duffymo
@duffymo - 那多重分派即时多态性呢?这些多态性似乎不需要基本静态类型。 - Saul

1
作者可能是这样说的:
  1. 当类B继承自A时,类B可以被强制转换为A——也称为多态性。因此,继承直接允许多态性。

  2. 当A实现接口I*something*时,A可以作为I*something*漫游,这也称为多态性。因此,接口使多态性成为可能。

  3. 抽象:抽象类只是另一个不能被实例化并充当基类(通常)的类。非抽象子类可以被强制转换为抽象类,从而实现多态性。

因此,事实上,大多数面向对象编程的概念都可以看作是多态性,正是由于这个原因,作者可能会这样说。


0
通常而言,它是创建对象的想法(包括字段、方法等),这些对象可以具有多个形式 - 派生(抽象)类、实现接口等。
如果您先查阅了Google、Wikipedia等,您只需几秒钟就能得到答案。

1
不,我并没有问“什么是多态性”。我问的是“为什么多态性是面向对象编程的关键”?为什么不是继承是关键呢? - ipkiss
也许你应该先确保自己理解什么是多态性。继承是“多态性”背后的关键概念之一... - Havelock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接