public class Test2 {
public static void main(String[] args) {
Father f = new Child();
f.service();
}
}
class Father{
public void service(){
System.out.println("parent service");
doGet();
}
public void doGet(){
System.out.println("parent doGet");
}
}
class Child extends Father{
public void service(){
System.out.println("child service");
super.service();
}
public void doGet(){
System.out.println("child doGet");
}
}
结果是:
child service
parent service
child doGet
比较难以理解的是调用super.service(),结果却是
parent service
child doGet
也就是说:
public void service(){
System.out.println("parent service");
doGet();
}
public void doGet(){
System.out.println("parent doGet");
}
这段代码中调用的doGet()是子类的doGet方法。
原因:我们方法调用的时候,会默认将this关键字传入进去(隐式传this),而Father f = new Child()这段代码,是一个父类引用指向子类对象。它会调用Child的方法。而隐式传的this就是Child的this。
所以当调用doGet()方法时,其实就相当于this.doGet()。(我们直接加上this,结果也是正确的)。
也就是Child 的doGet方法。