如何使用java子父類的構(gòu)造方法

首先,構(gòu)造方法本身會(huì)有一個(gè)隱式的無參構(gòu)造(默認(rèn)):

在安居等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站制作,安居網(wǎng)站建設(shè)費(fèi)用合理。

①不寫構(gòu)造方法,類中的第一行代碼事實(shí)上有一個(gè)默認(rèn)的無參構(gòu)造(系統(tǒng)會(huì)隱式為你寫好)

public class Student {
        private String name;
//        public Student() {}      隱式地“寫”在這里,你看不見
//  Strudent類中雖然沒有寫構(gòu)造方法,但相當(dāng)于有上面的無參構(gòu)造
//   只不過是隱式的,你看不見
}

②只寫帶參構(gòu)造方法,相當(dāng)于只有該帶參構(gòu)造方法(隱式的無參構(gòu)造會(huì)被屏蔽無視掉,視為無效)

public class Student {
        private String name;
        public Student(String name) {
            this.name=name;
        }
//  此時(shí)原來Strudent類中的隱式的無參構(gòu)造方法被屏蔽了,無效了
//  類中只有帶參構(gòu)造
}

③若想同時(shí)擁有無參和帶參構(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)造方法(無論是無參和有參)中,方法中的第一行代碼事實(shí)上都隱式地包含了父類的無參構(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)造方法時(shí),都會(huì)先調(diào)用父類的無參構(gòu)造方法了,因?yàn)槟J(rèn)的super()存在。

⑤同理,類似與上面的②,此時(shí)若寫一個(gè)有參構(gòu)造,super(xx)會(huì)把隱式的super()屏蔽掉

public class Stu extends Student {
    private String name;
    
    public Stu(String name) {
    // super();  原來隱式寫在這里的super()被屏蔽了,無效了
    super(name);
    
    // 在子類的帶參構(gòu)造, 由于的super(name)的存在,super()無效了
    //此時(shí)子類的帶參構(gòu)造中,只有super(name)
    }
}

這就是為什么當(dāng)父類沒有無參構(gòu)造(即只有帶參構(gòu)造——對(duì)應(yīng)情況②)時(shí),子類的構(gòu)造方法編譯無法通過。這是因?yàn)樽宇惖臉?gòu)造函數(shù)(帶參或無參)將調(diào)用父類的無參構(gòu)造函數(shù)。 由于編譯器試圖向子類中的2個(gè)構(gòu)造函數(shù)中插入super() ,但父類的默認(rèn)構(gòu)造函數(shù)未定義,因此編譯器會(huì)報(bào)告錯(cuò)誤消息。

要解決這個(gè)問題,只需要

1)添加一個(gè)無參構(gòu)造函數(shù)給父類——顯式地在父類中添加無參構(gòu)造

2)刪除父類中自定義的有參構(gòu)造函數(shù)——等價(jià)于恢復(fù)了默認(rèn)的無參構(gòu)造

3)將 Super(XXX) 添加到子類構(gòu)造函數(shù)——通過⑤的原來來屏蔽默認(rèn)的super()

以上就是JAVA繼承中子父類的構(gòu)造方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

當(dāng)前文章:如何使用java子父類的構(gòu)造方法
轉(zhuǎn)載注明:http://bm7419.com/article0/gighoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站導(dǎo)航、小程序開發(fā)ChatGPT、移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)