this和super的區別
先講this和super的作用
this:表示本類屬性、表示本類方法和當前對象,俏皮的說是自己用的
super:調用父類的構造方法,俏皮的說是爸爸專用
1.this:每個類的每個非靜態方法(沒有被static修飾)都會隱含一個this關鍵字,它指向調用這個方法的對象;當在方法中使用本類屬性時,都會隱含地使用this關鍵字,當然也可以明確使用。
三種用法:
一:普通的直接引用、
二:參與成員名字重名的時候,用 this 來區分、
三:引用構造函數(引用構造函數的時候要放在函數第一行)
2.super: 可以理解爲是指向自己超(父)類對象的一個指針,而這個超類指的是離自己最近的一個父類(親生爸爸)。
super也有三種用法:
- 普通的直接引用、與 this 類似,super 相當於是指向當前對象的父類,這樣就可以用 super.xxx 來引用父類的成員。
- 子類中的成員變量或方法與父類中的成員變量或方法同名,調用父類的方法
- 而且是兩者都有的屬性、引用構造函數
- super(參數):調用父類中的某一個構造函數(應該爲構造函數中的第一條語句)。
- this(參數):調用本類中另一種形式的構造函數(應該爲構造函數中的第一條語句)。
兩者的異同:
- this 和 super 不能同時出現在一個構造函數裏面,因爲this必然會調用其它的構造函數,其它的構造函數必然也會有 super 語句的存在,所以在同一個構造函數裏面有相同的語句,就失去了語句的意義,編譯器也不會通過。
- this() 和 super() 都指的是對象,所以,均不可以在 static 環境中使用。包括:static 變量,static 方法,static 語句塊。
- 從本質上講,this 是一個指向本對象的指針, 然而 super 是一個 Java 關鍵字。 super代表的是父類空間的引用,his代表的是所屬函數的調用者對象.