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?
所有方法都是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)