从超类构造函数调用超类方法

Tin*_*iny 0 java inheritance

关于以下代码片段,我有一个非常简单的问题.

public class SuperClass {

    public SuperClass() {
        this.test();  //Always invokes the overridden method in the sub-class.
    }

    public void test() {
        System.out.println("test() in SuperClass.");
    }
}

public final class SubClass extends SuperClass {

    public SubClass() {
        super();        
    }

    @Override
    public void test() {        
        System.out.println("test() in SubClass.");
    }
}

public final class Test {

    public static void main(String... args) {
        SubClass subClass=new SubClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,方法中的唯一行main()间接地将调用传递给超类构造函数,在该构造函数中,它尝试将test()方法调用为this.test().

this.test()但是,在超类构造函数中调用的方法是重写的方法SubClass.

为什么this.test()超类构造函数中的方法调用不会在超类本身中调用自己的方法(尽管this指的是调用方法的当前实例)?

NPE*_*NPE 5

虽然[t] this指的是调用此方法的当前实例

确实如此,并且该实例的运行时类型是SubClass,因此SubClass调用了该方法.