更新時間:2020-07-30 15:57:46 來源:動力節(jié)點 瀏覽2330次
大家猜猜這個會輸出什么呢?靜態(tài)內(nèi)部類繼承Base類,屬性和父類的一樣,重寫了父類的一個方法,然后在main函數(shù)里面調(diào)子類的構(gòu)造函數(shù),其實仔細(xì)思考一下大概就知道輸出的是什么了~
輸出的答案是null
這題的流程是在初始化Sub對象前,首先JAVA虛擬機就在堆區(qū)開辟內(nèi)存并將子類Sub中的baseName和父類Base中的baseName均賦為null。Base b=new Sub()的時候,會先調(diào)用父類的無參構(gòu)造函數(shù),因為子類和父類屬性名一樣的話,會將父類的屬性隱藏。調(diào)用了父類的構(gòu)造函數(shù),父類的構(gòu)造函數(shù)中調(diào)用了callName方法,此時父類中的baseName的值為base,可是子類重寫了callName方法,且調(diào)用父類Base中的callName是在子類Sub中調(diào)用的,因此當(dāng)前的this指向的是子類,也就是說是實現(xiàn)子類的callName方法。可見,在baseName=“sub”執(zhí)行前(子類賦值語句),子類的callName()已經(jīng)執(zhí)行,所以子類的baseName為默認(rèn)值狀態(tài)null。
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“攜程java筆試題,據(jù)說這道題沒幾個人做對”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀