继承和公共/私有方法

zer*_*uno -2 java

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我会得到"两个"作为输出.

这是非常不可预测的,这是如何工作的?

Men*_*ena 6

run方法Two将不会覆盖该private方法One,因为它private对于任何外部类都是不可访问的One.

一旦方法被标记为public,继承系统发生时,和run被从调用startOne(作为方法没有覆盖),但随后动态解析(在运行时),为Tworun.

我的建议是,使用@Override注释在编译时确保方法被正确覆盖.

此外,您似乎正在使用startrun方法:记住您需要extend Threadimplement RunnableJVM将您的类识别为Runnables.

  • @codegasmer http://stackoverflow.com/questions/5378995/confused-with-java-overriding-the-access-level (2认同)