我对多态性、重载和覆盖的概念感到非常困惑,因为它对我来说似乎相同。请解释这些概念,以及它们之间有何不同
非常困惑,所以请正确指导我。
谢谢
我对多态性、重载和覆盖的概念感到非常困惑,因为它对我来说似乎相同。请解释这些概念,以及它们之间有何不同
非常困惑,所以请正确指导我。
谢谢
多态性可以通过覆盖来实现。简而言之,多态性是指对象根据自身性质提供不同行为(使用不同实现)的能力。具体来说,取决于它在类层次结构中的位置。
方法覆盖是指在超类或接口中定义的方法由其子类之一重新定义,从而修改/替换超类提供的行为。调用实现或另一个实现的决定是在运行时动态做出的,具体取决于调用操作的对象。请注意,方法的签名在覆盖时保持不变。
方法重载与多态无关。它是指定义不同形式的方法(通常通过接收不同的参数编号或类型)。它可以看作是静态多态性。调用实现或其他实现的决定是在编码时做出的。请注意,在这种情况下,方法的签名必须更改。
运算符重载是一个不同的概念,与多态性有关,它指的是某种语言相关运算符根据其操作数的类型表现出不同行为的能力(例如,+
可能意味着与String
s 的连接和与数字操作数的加法)。
Wikipedia 中的示例 非常具有说明性。
以下相关问题也可能有用:
很快,不,它们不一样。
重载意味着创建具有相同名称但不同参数的方法。
覆盖意味着在子类中重新定义超类方法的主体以改变方法的行为。
多态性是一个广泛的概念,包括覆盖和重载等等。维基百科对多态性的描述可以帮助你更好地理解多态性。特别是子类型多态性(或包含多态性)部分是您应该查看的地方。