java Super 用法詳解及實(shí)例代碼
java Super 用法詳解
1)有人寫了個(gè)很好的初始化屬性的構(gòu)造函數(shù),而你僅僅想要在其中添加另一些自己新建屬性的初始化,這樣在一個(gè)構(gòu)造函數(shù)中調(diào)用另外一個(gè)構(gòu)造函數(shù),可以避免重復(fù)的代碼量,減少工作量;
2)在一個(gè)構(gòu)造函數(shù)中調(diào)用另外一個(gè)構(gòu)造函數(shù)的時(shí)候應(yīng)該用的是同一塊內(nèi)存空間,在默認(rèn)的構(gòu)造函數(shù)中先初始化變量,調(diào)用另一個(gè)的時(shí)候覆寫已經(jīng)初始化的變量的值;
3)整個(gè)調(diào)用的過程和遞歸調(diào)用函數(shù)有點(diǎn)類似,不斷充氣球,直到整個(gè)氣球膨脹起來,不斷的深層遞進(jìn),遇到停止標(biāo)記,逐層的跳出來。
寫了段代碼,解釋我上面的敘述:
class JavanTiger { int age; // 年齡 int hight; // 身體高度 public JavanTiger() { print(); this.age=2; //這里初始化 age 的值 ,但遞歸返回的時(shí)候,這個(gè)值會(huì)被覆寫 } public JavanTiger(int age) { this(); // 調(diào)用自己的第一個(gè)構(gòu)造函數(shù),下面的兩個(gè)語(yǔ)句數(shù)不執(zhí)行的 this.age = age; print(); } public JavanTiger(int age, int hight) { this(age); // 調(diào)用自己第二個(gè)構(gòu)造函數(shù) ,下面的兩個(gè)語(yǔ)句數(shù)不執(zhí)行的 this.hight = hight; print(); } public void print() { //打印函數(shù) System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!"); } public static void main(String[] args) { new JavanTiger(3,3); } } //output //I'am a 0歲 0尺高 tiger! //I'am a 3歲 0尺高 tiger! //I'am a 3歲 3尺高 tiger!
個(gè)人理解就是這樣了,可能里面還有問題,比如構(gòu)造函數(shù)遞歸調(diào)用和程序函數(shù)遞歸調(diào)用的機(jī)制是否似乎相同的?構(gòu)造函數(shù)同對(duì)象一起產(chǎn)生,也就是同時(shí)會(huì)分配內(nèi)存空間出來,那門這樣的遞歸調(diào)用會(huì)不會(huì)打亂分配內(nèi)存的順序?希望看到的大牛們拍板,給個(gè)最好的解釋。
今天要總結(jié)的是 super 這個(gè)關(guān)鍵字的使用,super 在構(gòu)造函數(shù)中出現(xiàn)的時(shí)候一般是當(dāng)前這個(gè)類繼承了其他的類,super 的出現(xiàn)就是為了調(diào)用父類的構(gòu)造函數(shù),貼段代碼先
class Tiger { int age; // 年齡 int hight; // 身體高度 public Tiger() { print(); } public void print() { System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!"); } } public class JavanTiger extends Tiger { public JavanTiger() { super(); // 調(diào)用父類無參數(shù)的構(gòu)造函數(shù) } public static void main(String[] args) { new JavanTiger(); } }
其實(shí)在類JavanTiger 中的構(gòu)造函數(shù)中的 super()可以不寫,JAVA會(huì)默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造函數(shù),但如果父類沒有定義無參數(shù)的構(gòu)造函數(shù),沒有語(yǔ)法錯(cuò)誤,程序會(huì)自動(dòng)退出,沒有任何打印語(yǔ)句,這時(shí)候你需要手動(dòng)調(diào)用其他父類的構(gòu)造函數(shù),貼段代碼:
class Tiger { int age; // 年齡 int hight; // 身體高度 public Tiger(int age) { this.age = age; print(); } public void print() { System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!"); } } public class JavanTiger extends Tiger { public JavanTiger() { super(1); // 調(diào)用父類有參數(shù)的構(gòu)造函數(shù) } public static void main(String[] args) { new JavanTiger(); } }
這段代碼中的 super(1)必須要寫進(jìn)去,否則編譯器會(huì)報(bào)錯(cuò)。所以我簡(jiǎn)單的總結(jié)了一下,“this()是調(diào)用自己其他的構(gòu)造函數(shù),super()是調(diào)用自己繼承的父類的構(gòu)造函數(shù)“,如果只想調(diào)用默認(rèn)無參數(shù)的父類構(gòu)造函數(shù),不用在子類的構(gòu)造函數(shù)當(dāng)中寫出來,但是實(shí)際編程的時(shí)候,總是會(huì)忽略這一點(diǎn)。
那門這兩個(gè)關(guān)鍵字能不能同時(shí)出現(xiàn)在子類的一個(gè)構(gòu)造函數(shù)當(dāng)中納?答案肯定是不能。先說下自己的理解:
1)在新建一個(gè)基類的時(shí)候,不論遞歸調(diào)用幾次自身的構(gòu)造函數(shù),最終你都會(huì)去調(diào)用父類的構(gòu)造函數(shù),(不是顯式調(diào)用的話,系統(tǒng)會(huì)調(diào)用默認(rèn)無參數(shù)的父類構(gòu)造函數(shù));
2)JAVA 中規(guī)定使用 this 和 super 時(shí)必須放在構(gòu)造函數(shù)第一行,只有一個(gè)第一行;
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法
在我們使用進(jìn)行系統(tǒng)開發(fā)時(shí),為了提高系統(tǒng)的安全性,在登錄的時(shí)候多數(shù)人都會(huì)要求輸入驗(yàn)證,本文介紹了java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法,感興趣的一起來了解一下2021-05-05淺析SpringBoot中使用thymeleaf找不到.HTML文件的原因
這篇文章主要介紹了SpringBoot中使用thymeleaf找不到.HTML文件的原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07MyBatis @Param注解的實(shí)現(xiàn)
本文主要介紹了MyBatis @Param注解的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Java實(shí)現(xiàn)升級(jí)版布谷鳥闖關(guān)游戲的示例代碼
升級(jí)版布谷鳥闖關(guān)游戲是一個(gè)基于java的布谷鳥闖關(guān)游戲,鼠標(biāo)左鍵點(diǎn)擊控制鳥的位置穿過管道間的縫隙。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-02-02shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)
這篇文章主要為大家介紹了shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Maven pom.xml 添加本地jar包依賴以及打包方法
這篇文章主要介紹了Maven pom.xml 添加本地jar包依賴以及打包方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09