excel函數(shù)公式大全 創(chuàng)建子類(lèi)對(duì)象時(shí),子類(lèi)和父類(lèi)的構(gòu)造函數(shù)執(zhí)行順序是什么?
創(chuàng)建子類(lèi)對(duì)象時(shí),子類(lèi)和父類(lèi)的構(gòu)造函數(shù)執(zhí)行順序是什么?繼承時(shí),構(gòu)造函數(shù)的調(diào)用順序:1。如果繼承虛擬基類(lèi),則首先調(diào)用虛擬基類(lèi)的構(gòu)造函數(shù)。如果有多個(gè)虛擬基類(lèi),請(qǐng)按順序調(diào)用它們。2. 如果基類(lèi)是繼承的,則調(diào)用
創(chuàng)建子類(lèi)對(duì)象時(shí),子類(lèi)和父類(lèi)的構(gòu)造函數(shù)執(zhí)行順序是什么?
繼承時(shí),構(gòu)造函數(shù)的調(diào)用順序:
1。如果繼承虛擬基類(lèi),則首先調(diào)用虛擬基類(lèi)的構(gòu)造函數(shù)。如果有多個(gè)虛擬基類(lèi),請(qǐng)按順序調(diào)用它們。
2. 如果基類(lèi)是繼承的,則調(diào)用基類(lèi)的構(gòu)造函數(shù);如果有多個(gè)基類(lèi),則按順序調(diào)用它們。
3. 如果在類(lèi)中定義了成員對(duì)象,則調(diào)用成員對(duì)象的構(gòu)造函數(shù);如果有多個(gè)成員對(duì)象,則按成員對(duì)象定義的順序調(diào)用它們;
4,調(diào)用它們自己的構(gòu)造函數(shù);
析構(gòu)函數(shù)的調(diào)用順序相反。
父類(lèi)中有構(gòu)造函數(shù)子類(lèi)繼承時(shí)必須定義子類(lèi)的構(gòu)造方法嗎?
這取決于具體情況。
1。如果父類(lèi)沒(méi)有定義參數(shù)化構(gòu)造函數(shù)(或者有參數(shù)化構(gòu)造方法,但沒(méi)有參數(shù)化構(gòu)造方法),則子類(lèi)不需要顯式定義構(gòu)造方法。
2. 如果父類(lèi)顯式定義了一個(gè)參數(shù)構(gòu)造函數(shù),而沒(méi)有顯示無(wú)參數(shù)構(gòu)造函數(shù),則子類(lèi)必須顯式定義一個(gè)參數(shù)構(gòu)造函數(shù),并使用super(XX)在構(gòu)造函數(shù)中顯式調(diào)用父類(lèi)的參數(shù)構(gòu)造函數(shù)
不創(chuàng)建父類(lèi)對(duì)象,但調(diào)用父類(lèi)類(lèi)的構(gòu)造函數(shù)。構(gòu)造函數(shù)只是一個(gè)成員方法,沒(méi)有什么特別之處。
如果查看字節(jié)碼,新建和調(diào)用構(gòu)造函數(shù)是兩個(gè)步驟。Java create object是new,call constructor是invokespecial<init>。這里還可以看到,在調(diào)用構(gòu)造函數(shù)時(shí),您已經(jīng)有了一個(gè)對(duì)象(new),因此調(diào)用構(gòu)造函數(shù)并不意味著創(chuàng)建一個(gè)新對(duì)象。
很多人誤解了這一點(diǎn)。還有這個(gè)。轉(zhuǎn)到其他對(duì)象。但是,如果您查看字節(jié)碼,它們實(shí)際上是對(duì)象的引用,但是類(lèi)的名稱不同。說(shuō)白了,字節(jié)碼中沒(méi)有this和super關(guān)鍵字。如果是成員方法,則需要使用this或super,兩者都是0。
當(dāng)然,這只是一個(gè)字節(jié)碼,與真正的虛擬機(jī)執(zhí)行的最終代碼不同,但邏輯是這樣的,這并不妨礙我們理解它是如何工作的。
我讀了其他朋友的答案。如果您想根據(jù)父類(lèi)對(duì)象的創(chuàng)建來(lái)理解它,沒(méi)有大問(wèn)題。從邏輯上講,我們可以認(rèn)為那里有一個(gè)父類(lèi)對(duì)象,并且內(nèi)存中有父類(lèi)的成員。