關於子類和父類中的this的用法


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM