为什么要调用构造函数重写的方法而不是类中的方法呢?

时间:2012-05-13 00:08:36

标签: java scjp

通过runnung,我得到了以下代码:

来自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的overriden方法?是不是在编译之后,构造函数A中的代码以某种方式复制到了B类,以便我们实际上从类B调用我们的方法?

1 个答案:

答案 0 :(得分:3)

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

相关问题