3 回答

TA貢獻1876條經(jīng)驗 獲得超7個贊
給你舉個例子
class Father {
Father(){print ('father');};
}
class Son {
Son(){print ('son')};
}
如果只是這樣,那么構造Son之前會在后臺調(diào)用一下super()函數(shù),
調(diào)用過程你看不到,但是確實執(zhí)行了,結(jié)果是先father后son
但是這種時候你顯示的寫個super就沒有意義了,那么他在什么時候用呢,再舉個例子
給你舉個例子
class Father {
Father(){print ('father');};
Father(int age){print ('father is'+age);};
}
class Son {
Son(){super(36);print ('son')};
}
這種情況下輸出的就不是father 和 son了,而是father is 36 和 son
就是說在你父類不止一個構造函數(shù)時,顯示的調(diào)用super才有意義
進行初始化是一個方面,像我這個例子里就是輸出了一些信息

TA貢獻1793條經(jīng)驗 獲得超6個贊
1)super(參數(shù)):調(diào)用基類中的某一個構造函數(shù)(應該為構造函數(shù)中的第一條語句)
2)this(參數(shù)):調(diào)用本類中另一種形成的構造函數(shù)(應該為構造函數(shù)中的第一條語句)
3)super: 它引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時如:super.變量名 super.成員函數(shù)據(jù)名(實參)
4)this:它代表當前對象名(在程序中易產(chǎn)生二義性之處,應使用this來指明當前對象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時需用this來指明成員變量名)
5)調(diào)用super()必須寫在子類構造方法的第一行,否則編譯不通過。每個子類構造方法的第一條語句,都是隱含地調(diào)用super(),如果父類沒有這種形式的構造函數(shù),那么在編譯的時候就會報錯。
6)super()和this()類似,區(qū)別是,super()從子類中調(diào)用父類的構造方法,this()在同一類內(nèi)調(diào)用其它方法。
7)super()和this()均需放在構造方法內(nèi)第一行。
8)盡管可以用this調(diào)用一個構造器,但卻不能調(diào)用兩個。
9)this和super不能同時出現(xiàn)在一個構造函數(shù)里面,因為this必然會調(diào)用其它的構造函數(shù),其它的構造函數(shù)必然也會有super語句的存在,所以在同一個構造函數(shù)里面有相同的語句,就失去了語句的意義,編譯器也不會通過。
10)this()和super()都指的是對象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。
11)從本質(zhì)上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。

TA貢獻1820條經(jīng)驗 獲得超3個贊
其實在java里,super關鍵字有主要的兩種用法:
1、用在子類的構造方法里,主要是調(diào)用父類的默認構造方法。
2、在子類里調(diào)用隱藏或重寫的屬性或行為。
要理解用法第一,涉及到java的對象的初始化,要明白第二用法,不難但要先有繼承多態(tài)的基礎,就很好理解了!
添加回答
舉報