方法调用另一个被覆盖的方法,它在子类中调用?

Cov*_*var 0 java inheritance overriding

如果我有2个类,一个是具有以下内容的父类:

public class Parent {
    ...
    public void method1() {
        method2();
    }

    public void method2() {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在子类中

public class Child extends Parent {
    ...
    public void method2() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我运行以下代码:

Child c = new Child();
c.method1();
Run Code Online (Sandbox Code Playgroud)

调用哪个版本的method2?

aio*_*obe 5

所有方法都是Java 中的虚拟方法,这意味着Child.method2它将被调用(即使调用是从上下文完成的Parent).

如果Parent.method1依赖于实现的正确性method2,您应该以不同的方式设计它:

public class Parent {
    ...
    public void method1() {
        method2impl();
    }

    public void method2() {
        method2impl();
    }

    // make it private or final.
    public final method2impl() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)