多态性、重载和覆盖是相似的概念吗? [关闭]

Posted

技术标签:

【中文标题】多态性、重载和覆盖是相似的概念吗? [关闭]【英文标题】:Are Polymorphism , Overloading and Overriding similar concepts? [closed] 【发布时间】:2012-10-05 07:48:54 【问题描述】:

我对多态性、重载和覆盖的概念非常困惑,因为在我看来它们是一样的。请解释这些概念,以及它们之间的区别

非常困惑,所以请正确指导我。

谢谢

【问题讨论】:

见***.com/questions/154577/… 【参考方案1】:

Polymorphism 可以通过覆盖来实现。简而言之,多态性是指对象根据自身性质提供不同行为(使用不同实现)的能力。具体来说,取决于它在类层次结构中的位置。

Method Overriding 是在超类或接口中定义的方法由其子类之一重新定义时,从而修改/替换超类提供的行为。调用实现或另一个实现的决定是在运行时动态做出的,具体取决于调用操作的对象。请注意,方法的签名在覆盖时保持不变。

Method Overloading 与多态无关。它是指定义不同形式的方法(通常通过接收不同的参数编号或类型)。它可以看作是静态多态性。调用实现或其他实现的决定是在编码时做出的。请注意,在这种情况下,方法的签名必须更改。

Operator overloading 是一个不同的概念,与多态性有关,多态性是指某种语言相关运算符根据其操作数的类型表现出不同行为的能力(例如,+ 可能意味着与 @987654329 连接@s 和数字操作数的加法)。

***中的example 非常具有说明性。

以下相关问题也可能有用:

Polymorphism vs Overriding vs Overloading Polymorphism - Define In Just Two Sentences

【讨论】:

重载与多态性无关?重载是编译时多态。超载是运行时多态性 @DaniyalJavaid 回复有点晚了,但是当您所做的只是用 different 调用 different 方法时,我不会调用任何类型的方法重载多态性 签名。它们的共同点是方法名称。在该定义下,任何方法调用都可以被认为是编译时多态性。【参考方案2】:

简而言之,不,它们不一样。

重载意味着创建同名但参数不同的方法。

重写意味着在子类中重新定义超类方法的主体以改变方法的行为。

多态性是一个广泛的概念,包括覆盖和重载等等。 Wikipedia's description of polymorphism 可以帮助你更好地理解多态性。尤其是子类型多态性(或包含多态性)部分是您应该查看的地方。

【讨论】:

以上是关于多态性、重载和覆盖是相似的概念吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 多态性和重载?

重写覆盖重载多态几个概念的区别分析

重写覆盖重载多态几个概念的区别分析

8.继承覆盖重载与多态

多态性 - 重载/覆盖

java语言中,overload(重载)和override(覆盖)有何区别?