通过运行以下代码我得到了结果:
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 中调用我们的方法?
最佳答案
第二个对象的类型为 B,因此当在构造函数中调用方法 someMethod
时,它将采用该方法的最后一个方法声明,类型为 B
。
关于java - 为什么调用构造函数的重写方法而不是他的类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568385/