子类调用父类方法中的this

一直都说this指的是当前对象,super指的是父类对象。但是对这个this理解还是不透彻,今天看effective java 第14条,有个例子一直不理解:

package com.zgd;

public class SuperTest {
	public static void main(String[] args) {
		Parent c = new Parent();
		c.addAll();
	}
}

class Parent{
	public void add(){
		System.out.println("A add...");
	}
	
	public void addAll(){
		System.out.println("A add ALL...");
		add();
		//在父子类之间,如果在父类中使用this关键字,那么运行子类时如果走到this行,指的是子类而不是父类。
		//谁调用,this就是指谁
		System.out.println(this.getClass());
	}
}

class Child extends Parent{

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

	@Override
	public void addAll() {
		// TODO Auto-generated method stub
		System.out.println("B add ALL...");
		super.addAll();
	}
	
}

最后输出的结果是
B add ALL...
A add ALL...
B add...
A add...
按我的理解,super.addAll()方法调用来Parent中的addAll(),而Parent中的addAll()调用了add()。这里的add最后调用的是Child的add(),既然是super.addAll(),为何最后竟然调用的是子类的add()方法。。。

这里涉及到的问题是当子类调用super走到父类的方法中,这时的对象this到底是指Child子类还是父类Parent?

正确答案是子类,this.add();其中的this是指当前对象,也就是Child c = new Child();中的c.

因此虽然是在父类中执行的add方法,但实际上执行的是子类的add方法

在父类的add 方法中

System.out.println(this.getClass());
结果是Child而不是Parent!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值