`

java方法调用内存相关

 
阅读更多
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方法。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics