与多态混淆:参数,包含,强制和重载

时间:2014-05-31 14:22:58

标签: language-agnostic polymorphism

阅读stackoverflow问题,普遍的共识似乎是重载不是多态的一部分。

然而,我的OOP讲义指出:

“有四种多态:参数,包含,强制和重载”。

在注释中,它指的是使用具有不同参数的方法进行重载,并且还重载运算符,例如: +在整数和浮动的意义上。

维基百科还指出“使用函数重载在许多语言中都支持Ad hoc多态。”

因此我很困惑为什么人们说这不是多态的一部分,因为它似乎在我看来;我们有一种方法的不同形式。

有人可以详细说明吗?

感谢。

2 个答案:

答案 0 :(得分:2)

如果你对Poly-Morphism这个词的含义有严格的定义,那么是的,重载是多态的。这些方法具有相同的名称,不同的签名,并且运行时根据您使用的签名知道要使用哪种方法。这是同一种方法的多种形式。它不是对类和继承,动物,狗和猫等多态性的“经典”描述。某些语言有运算符重载。这种类型有多种形式吗?

这实际上取决于你所说的多态性。如果你说许多表单只与对象相关,那么你们就不能在OOP意义上将重载作为“真正的”多态,因为它们是方法,而不是对象。

这可以提供帮助,Polymorphism vs Overriding vs Overloading

你可以看到有很多意见。

答案 1 :(得分:0)

Ad hoc多态性正在考虑运算符本身就像对象一样,它可以被重载,但仍然可以在用户不知道重载细节的情况下工作。除了运算符之外,这与对象中多态性的动机基本相同。 http://en.wikipedia.org/wiki/Operator_overloading