老忘記的一些理論知識,發現這篇文章比較詳細,先保存下來,以後還會完善。
--------------------------------------------------------------------------------------------------------
this和super的區別
No. |
區別 |
this |
super |
1 |
操作屬性 |
this.屬性:表示調用本類中的屬性,如果本類中的屬性不存在,則從父類查找 |
super.屬性:表示調用父類中的屬性 |
2 |
操作方法 |
this.方法():表示調用本類中的方法,如果本類中的方法不存在,則從父類查找 |
super.方法():表示調用父類中的方法 |
3 |
調用構造 |
this()調用本類中的其他構造方法 |
super():由子類調用父類中的構造方法 |
4 |
查找範圍 |
先從子類中查找,如果沒有從父類中查找 |
不查子類直接查找父類 |
5 |
特殊 |
當前對象 |
- |
既然this和super都可以調用構造,那麼這兩者絕對不能同時出現,因爲只要是調用構造,就必須將語句放在構造方法的首行,而且以後開發的時候建議明確的寫出“this.方法”或者“super.方法()”,這樣便於代碼的維護。
- 最好把super和this放在一起,對比着理解。
- super指向父類,用於引用父類的構造方法。
- this指向本類,用於引用本類中的其他方法。
- 這麼說太抽象,下邊是一個很經典的例子,完全體現了super和this的用法和區別,請花幾分鐘把它讀完:
- class Person {
- public static void prt(String s) {
- System.out.println(s);
- }
- Person() {
- prt("A Person.");
- }//構造方法(1)
- Person(String name) {
- prt("A person name is:" + name);
- }//構造方法(2)
- }
- public class Chinese extends Person {
- Chinese() {
- super(); // 調用父類構造方法(1)
- prt("A chinese.");// (4)
- }
- Chinese(String name) {
- super(name);// 調用父類具有相同形參的構造方法(2)
- prt("his name is:" + name);
- }
- Chinese(String name, int age) {
- this(name);// 調用具有相同形參的構造方法(3)
- prt("his age is:" + age);
- }
- public static void main(String[] args) {
- Chinese cn = new Chinese();
- cn = new Chinese("kevin");
- cn = new Chinese("kevin", 22);
- }
- }
- 執行結果爲:
- A Person.
- A chinese.
- A person name is:kevin
- his name is:kevin
- A person name is:kevin
- his name is:kevin
- his age is:22
- 下邊總結一下super和this的異同:
- 1)super(參數):調用父類的構造方法 。
- 2)this(參數):調用本類的其他構造方法。
- 3)都必須放在構造方法的第一行。
- 3)super:引用父類中的成員,當子類和父類中的方法重名時,這樣用。
- 4)this:代表當前對象名(在程序中易產生二義性之處,應使用this來指明當前對象;如果函數的形參與類中的成員數據同名,這時需用this來指明成員變量名)。
- 5)this()和super()都指的是對象,所以,均不能在static環境中使用。包括:static變量,static方法,static語句塊。
- 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/