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

时间:2014-02-17 19:32:17

标签: 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();
    }
}

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

超级构造函数中this.test()调用的方法是SubClass中的重写方法。

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

2 个答案:

答案 0 :(得分:5)

  

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

确实如此,该实例的运行时类型为SubClass,因此调用了SubClass的方法。

答案 1 :(得分:1)

在面向对象编程中,其中一个想法是对象本身负责其对数据的操作方式。因为您调用SubClass对象,所以当您从任何地方调用该对象上的test()时,都会调用SubClass的test()方法。 this关键字引用当前实例,它将引用调用对象的任何内容。