class A {
A() { System.out.println("You call super class non-args constructor!"); } }
class B extends A {
B() { //這里,編譯器將自動(dòng)加上 super();
System.out.println("You call subclass constructor!"); } B(String n) {
super();
this();
//實(shí)際就是調(diào)用了B(){...},而在B(){...}中編譯器自動(dòng)加上了
//super();這樣就相當(dāng)于兩次調(diào)用了super();也就是說(shuō)對(duì)父類(lèi)進(jìn) //行了兩次初始化。而在實(shí)例化一個(gè)對(duì)象時(shí),一個(gè)構(gòu)造方法只能調(diào)用一次,這說(shuō)明this和super不能同時(shí)存在一個(gè)構(gòu)造方法中。
//同時(shí)因?yàn)橄到y(tǒng)沒(méi)有在第一行發(fā)現(xiàn)this()或super()調(diào)用,就會(huì)自動(dòng)加上super(),如果沒(méi)有將this()和super()放在第一行就會(huì)產(chǎn)生矛盾。
//因?yàn)榭傆幸粋€(gè)super()在第二句上。所以該程序不能通過(guò)編譯!?。? }結(jié)論 也就是說(shuō)你必須在構(gòu)造器的第一行放置super或者this構(gòu)造器,否則編譯器會(huì)自動(dòng)地放一個(gè)空參數(shù)的super構(gòu)造器的,其他的構(gòu)造器也可以調(diào)用super或者this,調(diào)用成一個(gè)遞歸構(gòu)造鏈,最后的結(jié)果是父類(lèi)的構(gòu)造器(可能有多級(jí)父類(lèi)構(gòu)造器)始終在子類(lèi)的構(gòu)造器之前執(zhí)行,遞歸的調(diào)用父類(lèi)構(gòu)造器。無(wú)法執(zhí)行當(dāng)前的類(lèi)的構(gòu)造器。也就不能實(shí)例化任何對(duì)象,這個(gè)類(lèi)就成為一個(gè)無(wú)為類(lèi)。 從另外一面說(shuō),子類(lèi)是從父類(lèi)繼承而來(lái),繼承了父類(lèi)的屬性和方法,如果在子類(lèi)中先不完成父類(lèi)的成員的初始化,則子類(lèi)無(wú)法使用,應(yīng)為在java中不允許調(diào)用沒(méi)初始化的成員。在構(gòu)造器中是順序執(zhí)行的,也就是說(shuō)必須在第一行進(jìn)行父類(lèi)的初始化。而super能直接完成這個(gè)功能。This()通過(guò)調(diào)用本類(lèi)中的其他構(gòu)造器也能完成這個(gè)功能。 因此,this()或者super()必須放在第一行。
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供鳳城企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為鳳城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
分享標(biāo)題:為什么super(…)或this(…)調(diào)用語(yǔ)句只能作為構(gòu)造函數(shù)中的第一句出現(xiàn)?
轉(zhuǎn)載來(lái)于:http://jinyejixie.com/article10/gdjjdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、定制開(kāi)發(fā)、面包屑導(dǎo)航、微信公眾號(hào)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)