java程序员从笨鸟到菜鸟之(三十九)多态之this和super

我们知道:

this:代表当前对象的引用;在非静态方法中出现;实际调用此方法所在类的对象(谁来调用我,我就代表谁 )
super:代表当前对象父类的引用;在非静态的方法中出现

了解几个概念:引用类型和对象类型

二者都可以访问对应的属性和方法

下面以一道题分析二者

实例1

package 测试2;

public class Demo00 {
	public static void main(String[] args) {
		Fu f = new Zi();
		System.out.println(f.num);//(1)
		System.out.println(f.fun1());//(2)
		f.show();//(3)
	}
}

class Fu {
	public String num = "父类成员变量";

	public void show() {
		System.out.println(this.num);//写不写this一样   
		System.out.println(this.fun1());
	}
	
	public String fun1() {
		System.out.println(this.num);//写不写this一样   
		return "父类调用";
	}
}

class Zi extends Fu {
	public String num = "子类成员变量";//将此行注释掉,观看实验结果
	
	public String fun1() {
		System.out.println(this.num);//写不写this一样
		return "子类调用";
	}
}
编译结果:


分析:

this------实际调用方法所在类型的引用

 对(1)的说明:----调用父类的成员变量
多态:与成员变量无关,变量不涉及重写
        这里定义的是父类,而成员变量不涉及多态。

 对(2)的说明:----调用父类自己的方法
        多态:只涉及方法
子类涉及fun1()方法的重写
实际调用的是子类的方法fun1(),由于方法的覆盖,此时this指的是对象类型的引用(Zi),而不是引用类型的引用

 对(3)的说明:----重写,调用子类的方法
        多态:只涉及方法
子类没有涉及方法的重写
实际上还是父类(Fu)的show()方法
所以this实际上是引用类型的引用,而不是对象类型的引用

通俗的讲:调用父类方法对应的this是引用父类对象,而不是子类;调用子类方法对应的this是引用子类对象,而不是父类。  java平台区分this关键字指向的对象(调用的是子类还是父类对象),通过调用的方法来判断,变量没有重写之说!!!
实例2

package 测试2;

public class Demo00 {
	public static void main(String[] args) {
		Fu f = new Zi();
		System.out.println(f.num);//(1)
		System.out.println(f.fun1());//(2)
		f.show();//(3)
	}
}

class Fu {
	public String num = "父类成员变量";

	public void show() {
		System.out.println(this.num);  
		System.out.println(this.fun1());//涉及方法重写,进入到子类方法的方法体内
	}
	
	public String fun1() {
		System.out.println(this.num);
		return "父类调用";
	}
}

class Zi extends Fu {
	public String num = "子类成员变量";
	
	public String fun1() {
		super.fun1();//调用父类的方法---进入到父类的方法体内,执行完了,再向下进行
		System.out.println(this.num);
		return "子类调用";
	}
}

相关链接:点击打开链接点击打开链接

原来错误的思考方式:误以为super去调用父类的构造方法,发现子类也有此方法,就又去调用子类的方法。。。无限循环下去了


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值