子类中的方法可以重载超类中的方法吗?

新手上路,请多包涵

Java代码:

 class P {
    public void hello() {}
}

class C extends P {
    public void hello(String s) {}
}

我的问题是:类中的 hello C 重载了超类中同名的 P ?58bb–

我的朋友说他们不是因为他们不在同一个班级。

原文由 Freewind 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 447
2 个回答

采用更正式的方法,Java 7 的 Java 语言规范指出:

如果一个类的两个方法(无论是在同一个类中声明,还是由类继承,或者一个声明一个继承)具有相同的名称但签名不是覆盖等效的,则称该方法名称是超载。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9

我会将您的朋友指向此链接。

因此,简而言之,在您的示例中, hello 方法确实重载了。

原文由 JamesB 发布,翻译遵循 CC BY-SA 3.0 许可协议

简单说明:

我认为出现这个问题是因为有时我们会听到以下内容,

方法重载是在类内部进行的。方法重载发生在有继承关系的两个类中。

上面的说法是正确的。但是你的朋友错了。为什么?

因为当你扩展一个类时,子类拥有超类定义的所有方法。 就好像超类的所有方法都被子类实现了一样。 这意味着 hello() 方法也已由类 C 实现。现在,您在类 C 中添加了一个具有不同参数的方法 (hello(String s))。也就是说,C类一共有两个同名不同参数的方法,这就是“ 重载”。

希望它是透明的。

原文由 Jatin Lalwani 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题