我想弄清楚这一点:重载适用于子/超级类中的方法,还是仅适用于一个类的方法可以重载?
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 次 |
最近记录: |