`

this相关

 
阅读更多

父类:

public class Father {
	private int a = 123;
	int b = 234;
	protected int c = 345;
	public int d = 456;
	public  void doGet(){
		System.out.println("Father.doGet()");
	}
	public void doPost(){
		System.out.println("Father.doPost()");
	}
	public void service(){
		System.out.println("Father.service()");
		doGet();
	}
}

 子类:

public class Child extends Father {

	@Override
	public void doGet() {
		 System.out.println("Child.doGet()");
	}

	@Override
	public void doPost() {
		System.out.println("Child.doPost()");
	}

	@Override
	public void service() {
		// TODO Auto-generated method stub
		System.out.println("Child.service()");
		super.service();
	}
	
}
 

测试方法:

		Child c = new Child();
		c.service();

 结果:

Child.service()
Father.service()
Child.doGet()

分析:

  当调用子类的方法时,前两个值是Child.service和Father.service(),我们能够理解。

(首先执行子类的service,然后使用super调用父类的service方法。)。

但是最后调用doGet()方法时,却是调用了子类的doGet方法。

这其实是和this指针有关。在调用doGet()方法时,其实是省略了this指针。

如果加上this,那我们再去分析,就会明白此时的this是指向Child的。

那么调用的时候也就是调用了子类的doGet()方法。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics