例如,如果父類的構(gòu)造函數(shù)有參數(shù),子類的構(gòu)造函數(shù)中的第一句話是super(…)注意:調(diào)用子類構(gòu)造函數(shù)時,會先調(diào)用父類構(gòu)造函數(shù),然后調(diào)用子類構(gòu)造函數(shù)。如果要調(diào)用父類而不是子類的成員,可以:super。不創(chuàng)建父類的實例。如果你能創(chuàng)建一個父類的實例,我可以舉一個反例來說明這是錯誤的:當(dāng)父類是抽象類而子類不是抽象類時,子類在調(diào)用構(gòu)造函數(shù)時也會調(diào)用父類構(gòu)造函數(shù),創(chuàng)建子類和父類的兩個實例。但是,抽象類不能實例化。原來的假設(shè)是錯誤的。因此,父類不會被創(chuàng)建為實例。理論理解:當(dāng)用構(gòu)造函數(shù)添加new時,會創(chuàng)建一個對象(實例)。調(diào)用子類構(gòu)造函數(shù)時,調(diào)用父類構(gòu)造函數(shù)是初始化子類從父類繼承的部分。此過程不對父類使用new,因此不會為父類創(chuàng)建對象(實例)。
未創(chuàng)建父類對象,但調(diào)用了父類的構(gòu)造函數(shù)。構(gòu)造函數(shù)只是一個成員方法,沒有什么特別之處。
如果查看字節(jié)碼,新建和調(diào)用構(gòu)造函數(shù)是兩個步驟。Javacreateobject是new,callconstructor是invokespecial<init>。這里還可以看到,在調(diào)用構(gòu)造函數(shù)時,您已經(jīng)有了一個對象(new),因此調(diào)用構(gòu)造函數(shù)并不意味著創(chuàng)建一個新對象。
很多人誤解了這一點。還有這個。轉(zhuǎn)到其他對象。但是,如果您查看字節(jié)碼,它們實際上是對象的引用,但是類的名稱不同。說白了,字節(jié)碼中沒有this和super關(guān)鍵字。如果是成員方法,則需要使用this或super,兩者都是0。
當(dāng)然,這只是一個字節(jié)碼,與真正的虛擬機執(zhí)行的最終代碼不同,但邏輯是這樣的,這并不妨礙我們理解它是如何工作的。
我讀了其他朋友的答案。如果您想根據(jù)父類對象的創(chuàng)建來理解它,沒有大問題。從邏輯上講,我們可以認(rèn)為那里有一個父類對象,并且內(nèi)存中有父類的成員。
分享文章:構(gòu)造函數(shù)C子類調(diào)用父類構(gòu)造函數(shù)?-創(chuàng)新互聯(lián)
文章起源:http://chinadenli.net/article6/doijog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站制作、云服務(wù)器、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(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)
猜你還喜歡下面的內(nèi)容