我想弄清楚这一点:重载适用于子/超级类中的方法,还是仅适用于一个类的方法可以重载?
public class Super{
private void method(){
}
}
class Sub extends Super{
private void method(){
}
private void method(int x){
}
}
Run Code Online (Sandbox Code Playgroud)
Sub的两种方法是否合法重载?超级方法也重载了吗?
我不知道为什么您将所有方法都设为私有。如果您不这样做,那么您的问题实际上是很合理的。考虑以下代码:
class Super{
void method() {}
}
class Sub extends Super {
void method(int x) {}
}
Run Code Online (Sandbox Code Playgroud)
现在,即使只声明了一个方法,该类Sub实际上也有两个名为的方法method,因此该方法对于而言是重载的Sub。该类Super不受影响,因为它仍然只有一个method。
顺便说一句,上述最妨碍程序正确性的例子是标准方法equals。初学者很想仅针对特定类型来实现它:
public class Thing {
public boolean equals(Thing that) { ...compare by object contents... }
}
Run Code Online (Sandbox Code Playgroud)
但这不会覆盖Object.equals,因此现在该类具有两个equals方法。最糟糕的事情是某些代码意外地使用了特定的重载,而另一些代码则使用了通用的重载:
Thing t1 = new Thing(), t2 = new Thing();
System.out.println(t1.equals(t2)); // true, great
Object o1 = t1, o2 = t2;
System.out.println(o1.equals(o2)); // now suddenly false
System.out.println(t1.equals(o2)); // false again
System.out.println(o1.equals(t2)); // still false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9370 次 |
| 最近记录: |