0

通过运行以下代码,我得到了结果: 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 类调用我们的方法?

4

1 回答 1

3

第二个对象是 B 类型,因此在someMethod构造函数中调用该方法时,它采用该方法的最后一个方法声明为 type B

于 2012-05-13T00:11:01.360 回答