码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-05 11:09:25      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:this关键字   讲解   rgs   关键字   bsp   get   结果   xtend   stat   

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Fu f = new Zi();
 4         f.show();
 5     }
 6 }
 7  
 8 class Fu {
 9     int num = 1;
10  
11     void show() {
12         System.out.println(this.num);
13     }
14 }
15  
16 class Zi extends Fu {
17     int num = 2;
18 }

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


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

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

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

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Fu f = new Zi();
 4         
 5         System.out.println(f.num);//这里定义的是父类,而成员变量没有多态,所以即使你new的子类,依然指向父类的成员变量。
 6         System.out.println(f.fun1());//不解释了,就是多态。
 7         f.show();
 8     }
 9 }
10  
11 class Fu {
12     public String num = "父类成员变量";
13  
14     public void show() {
15         System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。
16         System.out.println(this.fun1());//因为方法有多态,所以this指向new对象的方法。
17     }
18     
19     public String fun1() {
20         System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。
21         return "父类调用";
22     }
23 }
24  
25 class Zi extends Fu {
26     public String num = "子类成员变量";
27     
28     public String fun1() {
29         System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。
30         return "子类调用";
31     }
32 }

 

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

标签:this关键字   讲解   rgs   关键字   bsp   get   结果   xtend   stat   

原文地址:https://www.cnblogs.com/wuruofeng/p/9907619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!