关于子类和父类中的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...
  • sinat_31311947
  • sinat_31311947
  • 2016年02月01日 17:03
  • 3565

父类方法中使用的this,那么这个this指的是谁?

一直在用一些东西,却总是感觉有一些疑惑,今天发现了自己一个及其致命的意识错误。关于父类中this关键字到底是谁的问题。请看代码 父类Parent [java] view ...
  • Runningzyx
  • Runningzyx
  • 2016年10月11日 22:14
  • 529

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

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

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

众所周知,java中this关键字指的是当前调用对象,一般使用方法不在此阐述public class HelloA { public static void main(String[] arg...
  • u010644448
  • u010644448
  • 2016年07月05日 14:16
  • 1962

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

在看毕向东java视频的时候,多态这一章讲到了一段代码: public class Demo { public static void main(String[] args) { Fu f = ...
  • rockpk008
  • rockpk008
  • 2016年08月30日 23:48
  • 2972

子类调用父类方法中的this

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

php 子类与父类的关系

当php 在子类中调用父类的方法,如果这个父类中的方法里调用了其他的方法,而这个方面在当前父类与子类中都有的话,那么是先调用子类的。 class A extends B{     publ...
  • vancekq
  • vancekq
  • 2012年05月29日 00:53
  • 1303

Java中子类和父类之间的调用关系

在讲之前,一些基本知识是应该具备的: 1.如果一个类中没有定义构造器,编译器在编译时会自动加上默认无参构造器: public ClassName {} 2. this 和 super 的...
  • czjuttsw
  • czjuttsw
  • 2012年12月29日 13:41
  • 3172

一个子类要调用父类的方法时,默认是使用this还是super?

因为子类已经继承了父类的所有方法,子类也未去重写这些方法,这些方法实际上已经属于子类,那么使用时,如果我们不写this或super,类也不报错;使用this或super也正确。那我们什么也不写的那种情...
  • lushuaiyin
  • lushuaiyin
  • 2012年03月26日 23:18
  • 2836

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

记得孙鑫VC++视频教程里有一段剖析MFC的代码,大意就是 CTESTAPP类是CWINAPP的子类,而CTESTAPP创建一个全局对象时,在CWINAPP的构造函数里面用了this指针,但是这里th...
  • ningyaliuhebei
  • ningyaliuhebei
  • 2014年12月31日 10:49
  • 3893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于子类和父类中的this的用法
举报原因:
原因补充:

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