重载Java中的私有方法

jar*_*sik 3 java overloading

我想弄清楚这一点:重载适用于子/超级类中的方法,还是仅适用于一个类的方法可以重载?

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的两种方法是否合法重载?超级方法也重载了吗?

Mar*_*nik 5

我不知道为什么您将所有方法都设为私有。如果您不这样做,那么您的问题实际上是很合理的。考虑以下代码:

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)