子類繼承父類的構(gòu)造函數(shù) 子類調(diào)用父類的構(gòu)造函數(shù)有什么用?
子類調(diào)用父類的構(gòu)造函數(shù)有什么用?比如,如果父類的構(gòu)造函數(shù)帶參數(shù),那子類的構(gòu)造函數(shù)里面第一句是super(…)【注:“…”指父類的的構(gòu)造函數(shù)的實(shí)餐】時(shí),當(dāng)調(diào)用子類構(gòu)造函數(shù)時(shí),會(huì)先調(diào)用父類構(gòu)造函數(shù),再調(diào)用
子類調(diào)用父類的構(gòu)造函數(shù)有什么用?
比如,如果父類的構(gòu)造函數(shù)帶參數(shù),那子類的構(gòu)造函數(shù)里面第一句是super(…)【注:“…”指父類的的構(gòu)造函數(shù)的實(shí)餐】時(shí),當(dāng)調(diào)用子類構(gòu)造函數(shù)時(shí),會(huì)先調(diào)用父類構(gòu)造函數(shù),再調(diào)用子類構(gòu)造函數(shù)。再如,子類和父類有同名但不同實(shí)現(xiàn)的成員,如果想調(diào)用的是父類的成員而不是子類的,則可以:super.成員。不會(huì)創(chuàng)建父類的實(shí)例。 如果可以創(chuàng)建父類實(shí)例,那么我可以舉一個(gè)反例來說明這是錯(cuò)的:當(dāng)父類是抽象類,子類不是抽象類時(shí),子類調(diào)用構(gòu)造函數(shù)時(shí)也會(huì)調(diào)用父類構(gòu)造函數(shù),就創(chuàng)建了子類和父類兩個(gè)實(shí)例。但是,抽象類是不能實(shí)例化的。矛盾,所以原假設(shè)錯(cuò)誤。所以,父類不會(huì)被創(chuàng)建出一個(gè)實(shí)例。 理論上理解:new加上構(gòu)造函數(shù)時(shí),才會(huì)創(chuàng)建一個(gè)對(duì)象(實(shí)例)。在調(diào)用子類構(gòu)造函數(shù)時(shí),調(diào)用父類構(gòu)造函數(shù),是為了初始化子類從父類繼承過來的部分。這個(gè)過程沒有對(duì)父類用new,所以沒有對(duì)父類創(chuàng)建對(duì)象(實(shí)例)。
子類為什么要調(diào)用父類的構(gòu)造函數(shù)?
子類構(gòu)造器會(huì)默認(rèn)調(diào)用 父類的無參構(gòu)造器,如果父類沒有無參構(gòu)造器,則需在子類構(gòu)造器的第一行顯式地調(diào)用父類的其他構(gòu)造器。
其次,從繼承的思想來看,你繼承一個(gè)類,就相當(dāng)于擴(kuò)展一個(gè)類,形成一個(gè)更為特殊的類,但經(jīng)常,我們需要將子類向上轉(zhuǎn)型為基類,以便使用或達(dá)到其他各種目的。
這時(shí),如果你生成子類對(duì)象時(shí)沒有調(diào)用父類的構(gòu)造器,那么,我們?cè)谑褂酶割惖囊恍┏蓡T變量的時(shí)候,就會(huì)報(bào)變量未初始化的錯(cuò)誤。請(qǐng)記住,變量初始化總是在構(gòu)造器調(diào)用之前完成!
構(gòu)造一個(gè)對(duì)象,先調(diào)用其構(gòu)造方法,來初始化其成員函數(shù)和成員變量。子類擁有父的成員變量和成員方法,如果不調(diào)用,則從父類繼承而來的成員變量和成員方法得不到正確的初始化。
在java語(yǔ)言里如何在子類中調(diào)用父類的有參構(gòu)造函數(shù)?
如果你是想在子類的構(gòu)造函數(shù)中調(diào)用父類構(gòu)造函數(shù),則需要在子類的構(gòu)造函數(shù)的函數(shù)體第一行(注釋語(yǔ)句除外)使用:super(參數(shù)列表)的方式調(diào)用,該參數(shù)列表與父類有參構(gòu)造函數(shù)聲明的參數(shù)列表一致,如果你不是在子類構(gòu)造函數(shù)中調(diào)用,則無法直接調(diào)用父類構(gòu)造函數(shù),這時(shí)創(chuàng)建一個(gè)父類對(duì)象(通過你想調(diào)用的有參父類構(gòu)造函數(shù)創(chuàng)建),就間接調(diào)用了該構(gòu)造函數(shù)。
創(chuàng)建子類對(duì)象時(shí),子類和父類的構(gòu)造函數(shù)執(zhí)行順序是什么?
繼承時(shí)構(gòu)造函數(shù)的調(diào)用順序: 1,如果繼承虛基類,先調(diào)用虛基類的構(gòu)造函數(shù),如果有多個(gè)虛基類,按順序調(diào)用。
2,如果繼承基類,調(diào)用基類的構(gòu)造函數(shù);如果有多個(gè)基類,按順序調(diào)用。3,如果類中定義了成員對(duì)象,調(diào)用成員對(duì)象的構(gòu)造函數(shù);如果有多個(gè)成員對(duì)象,則按成員對(duì)象定義的順序調(diào)用; 4,調(diào)用自身的構(gòu)造函數(shù); 析構(gòu)函數(shù)的調(diào)用順序與此相反。