2 回答

吃雞游戲
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
我用了最笨的方法,new 一個(gè)對(duì)象的時(shí)候,實(shí)際是在jvm里面分配內(nèi)存,初始化參數(shù),基本參數(shù)為0,引用參數(shù)為null.并沒(méi)有賦值,從上面我們可以看到,new 子類(lèi)先走父類(lèi)構(gòu)造,調(diào)text()時(shí),子類(lèi)重寫(xiě)了所以走自己的text,此時(shí)的a并沒(méi)有賦值,所以輸出是0.但我完成對(duì)象的構(gòu)建過(guò)后,再輸出a,此時(shí)已經(jīng)賦值完成,輸出了6.這個(gè)都是JVM的一些東西,比較復(fù)雜

慕婉清6462132
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
兄弟,我查了好久,
這個(gè)程序的執(zhí)行順序是:建立子類(lèi)sub的對(duì)象,接著調(diào)用父類(lèi)的構(gòu)造方法Super,Super中調(diào)用test方法,此時(shí)test方法調(diào)用的是子類(lèi)的test方法,而不是Super類(lèi)的,原因是建立的是子類(lèi)的對(duì)象,這一點(diǎn)類(lèi)似于Super s= new Sub(); s.test調(diào)用的就是子類(lèi)的test方法;說(shuō)完原因,這個(gè)是時(shí)候由于子類(lèi)的構(gòu)造方法還沒(méi)有執(zhí)行,所以成員變量a還是默認(rèn)值,int類(lèi)型的默認(rèn)值也就是0;此時(shí)父類(lèi)的構(gòu)造方法執(zhí)行完畢,接下來(lái)執(zhí)行子類(lèi)的構(gòu)造方法(子類(lèi)的構(gòu)造方法是系統(tǒng)默認(rèn)的無(wú)參數(shù)的構(gòu)造方法),這時(shí)候a的值才為6,所以,最后程序的輸出是0。
你可以建一個(gè)Sub引用去接收這個(gè)子類(lèi)對(duì)象,然后打印出a,就會(huì)輸出6;
建一個(gè)Super引用去接收這個(gè)對(duì)象,打印a就可以輸出5.
這個(gè)程序的執(zhí)行順序是:建立子類(lèi)sub的對(duì)象,接著調(diào)用父類(lèi)的構(gòu)造方法Super,Super中調(diào)用test方法,此時(shí)test方法調(diào)用的是子類(lèi)的test方法,而不是Super類(lèi)的,原因是建立的是子類(lèi)的對(duì)象,這一點(diǎn)類(lèi)似于Super s= new Sub(); s.test調(diào)用的就是子類(lèi)的test方法;說(shuō)完原因,這個(gè)是時(shí)候由于子類(lèi)的構(gòu)造方法還沒(méi)有執(zhí)行,所以成員變量a還是默認(rèn)值,int類(lèi)型的默認(rèn)值也就是0;此時(shí)父類(lèi)的構(gòu)造方法執(zhí)行完畢,接下來(lái)執(zhí)行子類(lèi)的構(gòu)造方法(子類(lèi)的構(gòu)造方法是系統(tǒng)默認(rèn)的無(wú)參數(shù)的構(gòu)造方法),這時(shí)候a的值才為6,所以,最后程序的輸出是0。
你可以建一個(gè)Sub引用去接收這個(gè)子類(lèi)對(duì)象,然后打印出a,就會(huì)輸出6;
建一個(gè)Super引用去接收這個(gè)對(duì)象,打印a就可以輸出5.
添加回答
舉報(bào)
0/150
提交
取消