关于以下代码段,我有一个非常简单的问题。
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 方法被调用)?
答案 0 :(得分:5)
虽然[t]
this
指的是调用此方法的当前实例
确实如此,该实例的运行时类型为SubClass
,因此调用了SubClass
的方法。
答案 1 :(得分:1)
在面向对象编程中,其中一个想法是对象本身负责其对数据的操作方式。因为您调用SubClass
对象,所以当您从任何地方调用该对象上的test()
时,都会调用SubClass的test()
方法。 this
关键字引用当前实例,它将引用调用对象的任何内容。