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类有两个方法,它们具有相同的名称但参数不同,并且是" 重载 ".
希望它非常清楚.
| 归档时间: |
|
| 查看次数: |
22372 次 |
| 最近记录: |