关于子类和父类中的this的用法
2016-08-30 23:48
183 查看
在看毕向东java视频的时候,多态这一章讲到了一段代码:
这里面的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(); 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 "子类调用"; } }
另外一篇非常好的文章
相关文章推荐
- 关于子类继承父类的构造函数用法
- 关于在子类中使用parent关键字时$this在父类中的归属
- 关于父类引用指向子类对象
- 嗯,关于JS函数内部变量的赋值和调用以及this的用法
- 黑马程序员--关于Java关键字this的用法说明
- 黑马程序员--03.面向对象--04.子类构造必须访问父类构造的原因 this_super语句的含义【个人总结】
- 关于子类与父类的转换, 还有多态的说明 - 回复 "靳承柱" 和 "志成" 的问题
- 关于继承中子类和父类中构造函数和析构函数运行的顺序,和继承的多态
- [cocos2d-x]关于update回调,以及继承后子类调用父类的Update处理的问题
- Java之关于This的用法
- 关于子类继承父类,父类调用被子类重载的方法是输出什么
- 关于父类引用指向子类对象
- 关于lock(this)的说明及用法
- 关于树形结构父类查子类,子类查父类的方法
- 关于“用父类创建对象而用子类初始化”的理解
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- 关于父类与子类的类型转换(TStrings与TStringList)
- 关于构造方法:子类只能继承父类的无参数构造方法
- 一个子类要调用父类的方法时,默认是使用this还是super?
- 关于原型链和继承问题的思考:为什么不能直接把父类的prototype赋值给子类的prototype