Spe*_*utz 2 java oop overloading
这可能只是语义,可能是一个愚蠢的问题,但我很好奇以下内容是否会被视为重载:
public String name = "name";
public void printName() {
System.out.println(name);
}
protected String printName(String extra) {
System.out.println(name + extra);
return name + extra;
}
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都说必须更改参数才能发生重载,并且只要参数不同,更改访问修饰符和返回类型就不会导致编译错误,但我无法弄清楚后者是否相同仍会被视为超载。
如有疑问,JLS 将提供帮助:
\n\n\n如果一个类的两个方法(无论是在同一个类中声明,还是都由一个类继承,或者一个声明一个继承)具有相同的名称,但签名不是重写等效的,则该方法名称被称为超载。
\n
所以这不是“改变参数”,而是关于不覆盖等价。要了解那是什么,请转到另一章,其中说:
\n\n\n两个方法签名 m1 和 m2 是覆盖等效的,当且仅当 m1 是 m2 的子签名或 m2 是 m1 的子签名。
\n
同一章解释了什么是子签名:
\n\n\n方法 m1 的签名是方法 m2 签名的子签名,如果:
\n
m2 与 m1 具有相同的签名,或者
\nm1 的签名与 m2 签名的擦除(\xc2\xa74.6)相同。
\n如何解释上述方法是留给您的练习。
\n| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |