方法重载是多态吗?

时间:2010-03-08 09:23:39

标签: language-agnostic polymorphism overloading

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

8 个答案:

答案 0 :(得分:40)

There are different types of polymorphism

  • 重载多态(也称为Ad-hoc多态)
  • overriding polymorphism

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

答案 1 :(得分:15)

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

答案 2 :(得分:11)

严格来说,多态性来自wikipedia

  

是一种类型A能够像另一种类型B一样出现和使用的能力。

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

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

  

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

答案 3 :(得分:8)

不,超载不是。也许你引用method overriding这确实是多态性的一部分。

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

  

多态性与方法不同   重载或方法覆盖。1   多态性只与...有关   具体的应用   实现接口或   更通用的基类。

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

答案 4 :(得分:8)

有两种类型的多态性。

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

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

答案 5 :(得分:5)

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

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

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

答案 6 :(得分:4)

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

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

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

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

答案 7 :(得分:-5)

这是一种必要的邪恶,应该只用作补充。最后,重载只应转换并最终转发到main方法。 OverloDing是必要的,因为staticalky调度环境的大多数vms不知道如何将一种类型转换为另一种类型,因此参数适合目标,这是使用重载来帮助的地方。

 StringBuilder
     Append(String) // main
     Append(Boolean) // converts and calls append(String)