关于子类和父类中的this的用法

原创 2016年08月30日 23:48:46

在看毕向东java视频的时候,多态这一章讲到了一段代码:

public class Demo {
	public static void main(String[] args) {
		Fu f = new Zi();
		f.show();
	}
}

class Fu {
	int num = 1;

	void show() {
		System.out.println(this.num);
	}
}

class Zi extends Fu {
	int num = 2;
}


这里面的this很奇怪,为什么输出结果是1,this不是指向当前对象么,当前对象不是子类的实例么?例如父类有get和set方法,里面应该有this关键字,当子类继承父类时,调用get和set方法时,this关键字如何区分调用的是子类的filed还是父类的filed(假设有同名的filed)?


这个问题由@NewMoons网友做出了讲解:

在继承多态中:
1、对于方法的覆盖,new的谁就调谁,这就是多态。
2、对于成员变量的覆盖,this在哪个类就指向哪个类的成员变量,没有多态。

并给出了一段精彩的代码:

public class Demo {
	public static void main(String[] args) {
		Fu f = new Zi();
		
		System.out.println(f.num);//这里定义的是父类,而成员变量没有多态,所以即使你new的子类,依然指向父类的成员变量。
		System.out.println(f.fun1());//不解释了,就是多态。
		f.show();
	}
}

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

	public void show() {
		System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。
		System.out.println(this.fun1());//因为方法有多态,所以this指向new对象的方法。
	}
	
	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,那么这个this指的是谁?

一直在用一些东西,却总是感觉有一些疑惑,今天发现了自己一个及其致命的意识错误。关于父类中this关键字到底是谁的问题。请看代码 父类Parent public class Parent { pu...

java this 子类调父类,父类再调用子类已覆盖的方法及属性(又一次理解)

众所周知,java中this关键字指的是当前调用对象,一般使用方法不在此阐述public class HelloA { public static void main(String[] arg...

谈谈基类与子类的this指针(C++)

记得孙鑫VC++视频教程里有一段剖析MFC的代码,大意就是 CTESTAPP类是CWINAPP的子类,而CTESTAPP创建一个全局对象时,在CWINAPP的构造函数里面用了this指针,但是这里th...

java this关键字在父子类构造方法中的运用

今天在学习的时候,遇见一个很有趣的代码,结果就是自己本来准备看电影的时间全部用来解读这段话代码了。一直在索取,所以今天也想分享一下。public class Father { private i...
  • gxzzxj
  • gxzzxj
  • 2016年07月18日 22:16
  • 898

Java中关于子类成员变量与父类成员变量同名

重写和重载是针对方法的,子类的变量可以覆盖父类的变量,但是不能改变父类的变量。...
  • T_alon
  • T_alon
  • 2016年06月24日 14:19
  • 5242

Java this 关键字用法

介绍Java中this关键字的用法,包括在构造方法中this关键字的用法,非在构造方法中this关键字的用法,继承关系下this关键字含义的变化,以及super和this关键字的异同。...
  • ccpat
  • ccpat
  • 2015年03月21日 13:42
  • 4241

java父类调用被子类重写的方法

1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解java继承中的初始化机...

子类调用父类方法中的this

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

父类引用指向子类对象

  • 2012年11月24日 15:59
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于子类和父类中的this的用法
举报原因:
原因补充:

(最多只允许输入30个字)