One.java
public class One {
private void run() {
System.out.println("one");
}
public void start() {
this.run();
}
}
Run Code Online (Sandbox Code Playgroud)
Two.java
public class Two extends One {
public void run() {
System.out.println("two");
}
}
Run Code Online (Sandbox Code Playgroud)
Main.java
public class Main {
public static void main(String[] args) {
Two t = new Two();
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:一
但是如果我在类中声明run方法public,One我会得到"两个"作为输出.
这是非常不可预测的,这是如何工作的?
该run方法Two将不会覆盖该private方法One,因为它private对于任何外部类都是不可访问的One.
一旦方法被标记为public,继承系统发生时,和run被从调用start在One(作为方法没有覆盖),但随后动态解析(在运行时),为Two的run.
我的建议是,使用@Override注释在编译时确保方法被正确覆盖.
此外,您似乎正在使用start和run方法:记住您需要extend Thread或implement RunnableJVM将您的类识别为Runnables.