我遇到过这种情况。我们有一个类可以说 Main 有一个私有(private)方法打印。还有另一个类 Main1,它扩展了 Main 类并重新定义了 print 方法。由于 main1 是 Main1 类的一个对象,我希望调用 main1 打印方法...
public class Main {
public static void main(String[] args) {
Main main1 = new Main1();
List<String> list = new ArrayList<String>();
main1.print(list);
}
private void print(List<String> string) {
System.out.println("main");
}
}
class Main1 extends Main {
public void print(List<String> string) {
System.out.println("main1");
}
}
在这种情况下,当我们运行程序时,它会打印“main”。这真的让我感到困惑,因为该方法是私有(private)的,甚至不是 Main1 类的一部分。
最佳答案
答案并不难:
main1
的类型变量是Main
(不是Main1
)- 所以你只能调用该类型的方法
- 唯一可能的方法叫做
print
接受List<String>
在Main
是私有(private)的 - 调用代码在类中
Main
所以它可以调用该类中的私有(private)方法
因此Main.print(List<String>)
将被调用。
请注意,更改 main1
的类型至 Main1
将导致其他 print(List<String>)
方法被调用。
关于Java 私有(private)方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7551828/