當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Java之super及this關(guān)鍵字的一點(diǎn)見解
在學(xué)習(xí)的過程中,有很多學(xué)生對(duì)super及this關(guān)鍵字老是分不清,或者是不知道怎么去用,特別是在構(gòu)造器之中,更是迷惑。我在這里主要針對(duì)學(xué)生上課中遇到的一點(diǎn)問題加以介紹,希望對(duì)大家學(xué)習(xí)有所幫助。
首先,我們先看下面一個(gè)例子:
這個(gè)例子非常簡單,有一個(gè)子類Child繼承于父類Father,然后在測(cè)試類Test中使用子類引用。調(diào)用子類中的fun方法,執(zhí)行結(jié)果和我們預(yù)料的一樣:
我們知道,使用new操作符,我們會(huì)調(diào)用類中相應(yīng)的構(gòu)造器,所以,在執(zhí)行"Child c = new Child(); "這條語句時(shí),我們應(yīng)該去調(diào)用子類中無參的構(gòu)造器,但是在子類Child中貌似沒有構(gòu)造器。這時(shí)大家要注意了,其實(shí)我們每個(gè)類中,實(shí)際上是有一個(gè)無參的構(gòu)造器的。但是,如果程序員自定義了構(gòu)造器,這時(shí)我們只能使用自己的構(gòu)造器。所以,這時(shí)也不難理解,為什么我們new子類實(shí)例,是沒有報(bào)錯(cuò)的了!所以,我們添上一個(gè)無參構(gòu)造器,結(jié)果也是一樣的。
說到這里,有些同學(xué)會(huì)問,父類中是否也有默認(rèn)的無參構(gòu)造器呢?答案是肯定的!
細(xì)心的同學(xué)這時(shí)會(huì)發(fā)現(xiàn),為什么父類中的構(gòu)造器先于子類的構(gòu)造器執(zhí)行呢?我經(jīng)常會(huì)給學(xué)生這樣解釋"老子都沒有,哪來的兒子",雖然這句話比較粗俗,但是一語道出了真諦。子類繼承父類,父類都不存在,子類談何繼承?但這只是我們邏輯上的理解,java語言怎么解釋的呢?這時(shí)就有了我們的主角:this,super。
this代表本類引用,super代表父類引用,構(gòu)造器中亦是如此?磳(shí)例:
這是不是一目了然啊?原來在子類構(gòu)造器中隱藏著一個(gè)super(),它就代表父類中的無參構(gòu)造器!