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

Fre*_*ind 6 java overloading

Java代码:

class P {
    public void hello() {}
}

class C extends P {
    public void hello(String s) {}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:hello类中是否C重载了超类中具有相同名称的类P

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

Jam*_*esB 10

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

如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等价的,那么方法名称就是超载.

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

我会把你的朋友指向这个链接.

因此,简而言之,在您的示例中,hello方法确实已经过载.


小智 8

简单说明:

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

" 方法重载是在类中执行的.方法重写发生在两个具有继承关系的类中. "

以上陈述是正确的.但你的朋友错了.为什么?

因为在扩展类时,子类具有超类定义的所有方法.就好像子类的所有超类方法都已由子类实现.这意味着hello()方法也已由C类实现.现在,您在C类中添加了一个具有不同参数的方法(hello(String s)).这意味着,C类有两个方法,它们具有相同的名称但参数不同,并且是" 重载 ".

希望它非常清楚.