java Super 用法詳解及實例代碼
java Super 用法詳解
1)有人寫了個很好的初始化屬性的構(gòu)造函數(shù),而你僅僅想要在其中添加另一些自己新建屬性的初始化,這樣在一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù),可以避免重復(fù)的代碼量,減少工作量;
2)在一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù)的時候應(yīng)該用的是同一塊內(nèi)存空間,在默認(rèn)的構(gòu)造函數(shù)中先初始化變量,調(diào)用另一個的時候覆寫已經(jīng)初始化的變量的值;
3)整個調(diào)用的過程和遞歸調(diào)用函數(shù)有點(diǎn)類似,不斷充氣球,直到整個氣球膨脹起來,不斷的深層遞進(jìn),遇到停止標(biāo)記,逐層的跳出來。
寫了段代碼,解釋我上面的敘述:
class JavanTiger {
int age; // 年齡
int hight; // 身體高度
public JavanTiger() {
print();
this.age=2; //這里初始化 age 的值 ,但遞歸返回的時候,這個值會被覆寫
}
public JavanTiger(int age) {
this(); // 調(diào)用自己的第一個構(gòu)造函數(shù),下面的兩個語句數(shù)不執(zhí)行的
this.age = age;
print();
}
public JavanTiger(int age, int hight) {
this(age); // 調(diào)用自己第二個構(gòu)造函數(shù) ,下面的兩個語句數(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òu)造函數(shù)遞歸調(diào)用和程序函數(shù)遞歸調(diào)用的機(jī)制是否似乎相同的?構(gòu)造函數(shù)同對象一起產(chǎn)生,也就是同時會分配內(nèi)存空間出來,那門這樣的遞歸調(diào)用會不會打亂分配內(nèi)存的順序?希望看到的大牛們拍板,給個最好的解釋。
今天要總結(jié)的是 super 這個關(guān)鍵字的使用,super 在構(gòu)造函數(shù)中出現(xiàn)的時候一般是當(dāng)前這個類繼承了其他的類,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();
}
}
其實在類JavanTiger 中的構(gòu)造函數(shù)中的 super()可以不寫,JAVA會默認(rèn)調(diào)用父類的無參數(shù)的構(gòu)造函數(shù),但如果父類沒有定義無參數(shù)的構(gòu)造函數(shù),沒有語法錯誤,程序會自動退出,沒有任何打印語句,這時候你需要手動調(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)去,否則編譯器會報錯。所以我簡單的總結(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)中寫出來,但是實際編程的時候,總是會忽略這一點(diǎn)。
那門這兩個關(guān)鍵字能不能同時出現(xiàn)在子類的一個構(gòu)造函數(shù)當(dāng)中納?答案肯定是不能。先說下自己的理解:
1)在新建一個基類的時候,不論遞歸調(diào)用幾次自身的構(gòu)造函數(shù),最終你都會去調(diào)用父類的構(gòu)造函數(shù),(不是顯式調(diào)用的話,系統(tǒng)會調(diào)用默認(rèn)無參數(shù)的父類構(gòu)造函數(shù));
2)JAVA 中規(guī)定使用 this 和 super 時必須放在構(gòu)造函數(shù)第一行,只有一個第一行;
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java書店系統(tǒng)畢業(yè)設(shè)計 總體設(shè)計(1)
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計,第一步系統(tǒng)總體設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10
Springboot?通過FastJson實現(xiàn)bean對象和Json字符串互轉(zhuǎn)問題
這篇文章主要介紹了Springboot?通過FastJson實現(xiàn)bean對象和Json字符串互轉(zhuǎn),本文嘗試驗證兩種場景給大家詳細(xì)介紹,對Springboot?FastJson實現(xiàn)bean和Json互轉(zhuǎn)問題,感興趣的朋友一起看看吧2022-08-08
解決springcloud 配置gateway 出現(xiàn)錯誤的問題
今天給大家分享springcloud 配置gateway 出現(xiàn)錯誤的問題,其實解決方法很簡單,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不報錯了,下面給大家展示下,感興趣的朋友一起看看吧2021-11-11

