方法重载是多态吗?

iTa*_*ayb 21 language-agnostic polymorphism overloading

方法重载是否被认为是多态的一部分?

Dar*_*rov 39

有不同类型的多态性:

  • 重载多态(也称为Ad-hoc多态)
  • 压倒多态性

所以是的,它是多态性的一部分.

  • 你需要提一下,"这部分的事实准确性是有争议的"所以我还没有说100%的重载是多态,据我所知. (3认同)
  • @FractalizeR:Strachey定义了Darin所说的内容.该部分的部分事实上并未引起争议.(至少,不是那些真正阅读过源文件的人.) (3认同)
  • @FractalizeR也许你的理解仅限于面向对象语言中的运行时多态,而不是一般的术语 (2认同)

Mar*_*nik 17

"多态性"只是一个词,并没有全球一致的精确定义.你不会被你的问题的"是"或"否"答案所启发,因为差异将在所选择的"多态性"定义中,而不是作为任何特定语言的特征的方法重载的本质.你可以在这里看到大多数其他答案中的证据,每个答案都引入了自己的定义,然后根据它来评估语言特征.


Ode*_*ded 11

严格来说,维基百科的多态性:

是一种类型A能够像其他类型一样出现和使用的能力,B.

因此,方法重载本身不被视为此定义多态的一部分,因为重载被定义为一种类型的一部分.

如果你在谈论包含多态性(通常被认为是重写),那是另一回事,然后,是的,它被认为是多态的一部分.

包含多态性是类型理论中的一个概念,其中名称可以表示许多不同类的实例,只要它们与某些常见的超类相关即可.


raj*_*raj 9

有两种类型的多态性.

  1. 静态的
  2. 动态.

重载是静态多态的类型.重写属于动态(或运行时)多态.

REF.http://en.wikipedia.org/wiki/Polymorphism_(computer_science)更详细地描述了它.


Jor*_*oba 8

不,超载不是.也许你指的是方法重写,这确实是多态的一部分.

进一步澄清,来自维基百科:

多态性与方法重载或方法重写不同.1 多态性仅涉及将特定实现应用于接口或更通用的基类.

所以我会说方法覆盖和方法重载以及某些语言关于多态的方便特性,但不是多态性(在面向对象编程中)的主要关注点,它只关注对象的行为能力,就好像它是层次结构中的另一个对象一样链.

  • 请参阅http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf(特别是第1.3节),以便更容易地了解为什么这是错误的. (5认同)
  • 请参阅http://www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf,了解为什么这是错误的. (4认同)
  • @GrijeshChauhan不适用的文章:"你应该使用或引用维基百科 - >>>作为学术论文的来源<<< - ?"......使用WP没有任何问题,但就像我说的那样,你应该去找资料来源. WP最好的事情就是它的引用. (2认同)

小智 6

方法覆盖或重载不是多态性。正确的说法是多态可以使用方法覆盖或重载以及使用其他方式来实现。

为了使用方法覆盖实现多态,您可以覆盖子类中方法的行为。

为了使用方法重载实现多态,你需要编写许多名称相同、参数数量相同但数据类型不同的方法,并在这些方法中实现不同的行为。现在这也是多态性。

其他实现多态的方法是运算符重载和实现接口。


dth*_*rpe 5

除了维基百科迂腐之外,考虑多态性的一种方法是:单行代码/单个方法调用在运行时根据用于调用的对象实例的类型执行不同的操作的能力.

方法重载不会在运行时更改行为.在编写和编译代码时,重载为同一方法名称的参数列表提供了更多选择,但是在编译时,选择将永久修复在代码中.

不要与方法覆盖相混淆,方法覆盖是多态的一部分.