Java(二) this 和super 詳解

老忘記的一些理論知識,發現這篇文章比較詳細,先保存下來,以後還會完善。


--------------------------------------------------------------------------------------------------------

this和super的區別

No.

區別

this

super

1

操作屬性

this.屬性:表示調用本類中的屬性,如果本類中的屬性不存在,則從父類查找

super.屬性:表示調用父類中的屬性

2

操作方法

this.方法():表示調用本類中的方法,如果本類中的方法不存在,則從父類查找

super.方法():表示調用父類中的方法

3

調用構造

this()調用本類中的其他構造方法

super():由子類調用父類中的構造方法

4

查找範圍

先從子類中查找,如果沒有從父類中查找

不查子類直接查找父類

5

特殊

當前對象

-

既然this和super都可以調用構造,那麼這兩者絕對不能同時出現,因爲只要是調用構造,就必須將語句放在構造方法的首行,而且以後開發的時候建議明確的寫出“this.方法”或者“super.方法()”,這樣便於代碼的維護。

--------------------------------------------------------------------------------------------------------



  1. 最好把super和this放在一起,對比着理解。  
  2. super指向父類,用於引用父類的構造方法。  
  3. this指向本類,用於引用本類中的其他方法。  
  4. 這麼說太抽象,下邊是一個很經典的例子,完全體現了super和this的用法和區別,請花幾分鐘把它讀完:  
  5. class Person {  
  6.     public static void prt(String s) {  
  7.        System.out.println(s);  
  8.     }  
  9.   
  10.     Person() {  
  11.        prt("A Person.");  
  12.     }//構造方法(1)  
  13.    
  14.     Person(String name) {  
  15.        prt("A person name is:" + name);  
  16.     }//構造方法(2)  
  17. }  
  18.    
  19. public class Chinese extends Person {  
  20.     Chinese() {  
  21.        super(); // 調用父類構造方法(1)  
  22.        prt("A chinese.");// (4)  
  23.     }  
  24.    
  25.     Chinese(String name) {  
  26.        super(name);// 調用父類具有相同形參的構造方法(2)  
  27.        prt("his name is:" + name);  
  28.     }  
  29.    
  30.     Chinese(String name, int age) {  
  31.        this(name);// 調用具有相同形參的構造方法(3)  
  32.        prt("his age is:" + age);  
  33.     }  
  34.    
  35.     public static void main(String[] args) {  
  36.        Chinese cn = new Chinese();  
  37.        cn = new Chinese("kevin");  
  38.        cn = new Chinese("kevin", 22);  
  39.     }  
  40. }  
  41. 執行結果爲:  
  42. A Person.  
  43. A chinese.  
  44. A person name is:kevin  
  45. his name is:kevin  
  46. A person name is:kevin  
  47. his name is:kevin  
  48. his age is:22  
  49.   
  50. 下邊總結一下super和this的異同:  
  51. 1)super(參數):調用父類的構造方法 。  
  52. 2)this(參數):調用本類的其他構造方法。  
  53. 3)都必須放在構造方法的第一行。  
  54. 3)super:引用父類中的成員,當子類和父類中的方法重名時,這樣用。  
  55. 4)this:代表當前對象名(在程序中易產生二義性之處,應使用this來指明當前對象;如果函數的形參與類中的成員數據同名,這時需用this來指明成員變量名)。  
  56. 5)this()和super()都指的是對象,所以,均不能在static環境中使用。包括:static變量,static方法,static語句塊。  
  57. 6)從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。  

--------------------------------------------------------------------------------------------------------

(十分感謝)轉自: http://blog.csdn.net/tanyit/article/details/6946443

相關文章: http://www.jb51.net/article/44589.htm

http://zhangjunhd.blog.51cto.com/113473/20531/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章