方法重载是否考虑多态?
方法重载被认为是多态的一部分吗?
“多态性”仅仅是一个词,并没有一个全球认同的精确定义。 你的问题不会被“是”或“否”的答案所启发,因为这个区别将在“多态性”的选定定义中,而不是作为任何特定语言的特征的方法超载的本质。 你可以在这里看到大多数其他答案的证据,每个答案都引入了自己的定义,然后评估它的语言特征。
有多种types的多态 :
- 重载多态(也称为Ad-hoc多态)
- 覆盖多态性
所以是的,它是多态的一部分。
严格来说,来自维基百科的多态:
A是一种types的能力,看起来像另一种typesB一样使用。
所以,方法重载本身不被认为是定义多态的一部分,因为重载被定义为一个types的一部分。
如果你正在谈论包含多态性(通常被认为是压倒性的 ),这是一个不同的问题,然后,是的,它被认为是多态的一部分。
包含多态是types理论中的一个概念,其中一个名称可以表示许多不同类的实例,只要它们是由一些常见的超类来关联的。
不,重载不是。 也许你提到方法重写 ,这确实是多态的一部分。
为了进一步澄清,从维基百科:
多态性与方法重载或方法重载不一样。 1多态性只涉及将特定实现应用于接口或更通用的基类。
所以我会说方法重写AND方法重载和一些关于多态的语言方便的特性,但不是多态性(在面向对象的编程中)的主要关注点,它只考虑对象作为其层次结构中另一个对象的能力链。
有两种types的多态性。
- 静态的
- dynamic。
重载是静态多态的types。重写属于dynamic(或运行时)多态。
REF。 http://en.wikipedia.org/wiki/Polymorphism_(computer_science)其中描述了更多。;
抛开维基百科,一种思考多态性的方法是:根据用于调用的对象实例的types,单行代码/单方法调用在运行时执行不同的事情的能力。
方法重载不会在运行时改变行为。 当你编写和编译代码时,重载为你提供了更多关于同一个方法名的参数列表的select,但是当它被编译的时候,这个select在代码中永远是固定的。
不要与方法重写混淆,这是多态的一部分。
方法覆盖或重载不是多态。 正确的方法是,多态可以使用方法覆盖或重载并使用其他方式来实现。
为了使用方法覆盖来实现多态,可以覆盖子类中方法的行为。
为了使用方法重载来实现多态性,需要编写多个具有相同名称,相同参数但具有不同数据types的方法,并在这些方法中实现不同的行为。 现在也是多态。
其他实现多态的方法是运算符重载和实现接口。
不, 重写是, 重载是不同的东西
这是一个必要的邪恶,应该只是作为补充。 最终超载应该只能转换并最终转向主要方法。 OverloDing是必须的,因为大多数vms for staticalky派遣环境不知道如何将一种types转换为另一种,所以参数适合目标,这是一个使用重载帮助的地方。
StringBuilder Append(String) // main Append(Boolean) // converts and calls append(String)