【发布时间】:2014-02-17 19:32:16
【问题描述】:
我有一个关于以下代码 sn-p 的非常简单的问题。
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() 方法中的唯一一行间接传递了对超类构造函数的调用,在该构造函数中它尝试以this.test() 调用test() 方法。
在超类构造函数中this.test()调用的方法是SubClass中的重写方法。
为什么超类构造函数中的方法调用this.test() 不调用超类本身中的自己的方法(尽管this 指的是当前实例,this 方法将通过该实例被调用)?
【问题讨论】:
-
因为
this是当前的SubClass实例。 -
@RohitJain:IMO 这是一个相关但明显不同的问题。
-
@NPE 我同意你的观点。我不应该将其关闭为重复,但该问题包含此问题的答案:)
-
没有
SuperClass实例,只有SubClass实例。 -
@RohitJain:我同意;它确实(但对于这个问题可能有点过于复杂)。 :)
标签: java inheritance