首先,構(gòu)造方法本身會有一個隱式的無參構(gòu)造(默認(rèn)):
在安居等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站制作,安居網(wǎng)站建設(shè)費用合理。
①不寫構(gòu)造方法,類中的第一行代碼事實上有一個默認(rèn)的無參構(gòu)造(系統(tǒng)會隱式為你寫好)
public class Student { private String name; // public Student() {} 隱式地“寫”在這里,你看不見 // Strudent類中雖然沒有寫構(gòu)造方法,但相當(dāng)于有上面的無參構(gòu)造 // 只不過是隱式的,你看不見 }
②只寫帶參構(gòu)造方法,相當(dāng)于只有該帶參構(gòu)造方法(隱式的無參構(gòu)造會被屏蔽無視掉,視為無效)
public class Student { private String name; public Student(String name) { this.name=name; } // 此時原來Strudent類中的隱式的無參構(gòu)造方法被屏蔽了,無效了 // 類中只有帶參構(gòu)造 }
③若想同時擁有無參和帶參構(gòu)造,必須顯式地寫出無參和帶參構(gòu)造方法
public class Student { private String name; public Student() {} // 顯式地將無參構(gòu)造寫出來 public Student(String name) { this.name=name; } // 若想Strudent類中擁有無參構(gòu)造方法,必須顯式地寫出來 }
進(jìn)一步結(jié)合繼承,就需要考慮到子父類:
④在子類的構(gòu)造方法(無論是無參和有參)中,方法中的第一行代碼事實上都隱式地包含了父類的無參構(gòu)造方法
即: super()
public class Stu extends Student { private String name; public Stu() { // super(); // 在子類的無參構(gòu)造中,super()是隱式的“寫”在這里的 } public Stu(String name) { // super(); this.name=name; // 在子類的帶參構(gòu)造,上面的super()同樣也是隱式的“寫”在這里的 } }
這就是為什么,調(diào)用子類的構(gòu)造方法時,都會先調(diào)用父類的無參構(gòu)造方法了,因為默認(rèn)的super()存在。
⑤同理,類似與上面的②,此時若寫一個有參構(gòu)造,super(xx)會把隱式的super()屏蔽掉
public class Stu extends Student { private String name; public Stu(String name) { // super(); 原來隱式寫在這里的super()被屏蔽了,無效了 super(name); // 在子類的帶參構(gòu)造, 由于的super(name)的存在,super()無效了 //此時子類的帶參構(gòu)造中,只有super(name) } }
這就是為什么當(dāng)父類沒有無參構(gòu)造(即只有帶參構(gòu)造——對應(yīng)情況②)時,子類的構(gòu)造方法編譯無法通過。這是因為子類的構(gòu)造函數(shù)(帶參或無參)將調(diào)用父類的無參構(gòu)造函數(shù)。 由于編譯器試圖向子類中的2個構(gòu)造函數(shù)中插入super() ,但父類的默認(rèn)構(gòu)造函數(shù)未定義,因此編譯器會報告錯誤消息。
要解決這個問題,只需要
1)添加一個無參構(gòu)造函數(shù)給父類——顯式地在父類中添加無參構(gòu)造
2)刪除父類中自定義的有參構(gòu)造函數(shù)——等價于恢復(fù)了默認(rèn)的無參構(gòu)造
3)將 Super(XXX) 添加到子類構(gòu)造函數(shù)——通過⑤的原來來屏蔽默認(rèn)的super()
以上就是JAVA繼承中子父類的構(gòu)造方法的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
當(dāng)前文章:如何使用java子父類的構(gòu)造方法
轉(zhuǎn)載注明:http://chinadenli.net/article0/gighoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站導(dǎo)航、小程序開發(fā)、ChatGPT、移動網(wǎng)站建設(shè)、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)