通过运行以下代码,我得到了结果:
A 类中的方法 B
类中的
方法。
public class Test {
static class A {
public A() {
someMethod();
}
public void someMethod() {
System.out.println("method from class A");
}
}
static class B extends A {
public void someMethod() {
System.out.println("method from class B");
}
}
public static void main(String... args) {
new A();
new B();
}
}
结果的第一行很清楚,但第二行不是。为什么A类的构造函数没有调用A类定义的方法,而是B类的重写方法?是不是在编译之后,构造函数 A 的代码以某种方式复制到 B 类,以便我们实际从 B 类调用我们的方法?