更新時間:2020-07-30 15:57:46 來源:動力節點 瀏覽2236次
大家猜猜這個會輸出什么呢?靜態內部類繼承Base類,屬性和父類的一樣,重寫了父類的一個方法,然后在main函數里面調子類的構造函數,其實仔細思考一下大概就知道輸出的是什么了~
輸出的答案是null
這題的流程是在初始化Sub對象前,首先JAVA虛擬機就在堆區開辟內存并將子類Sub中的baseName和父類Base中的baseName均賦為null。Base b=new Sub()的時候,會先調用父類的無參構造函數,因為子類和父類屬性名一樣的話,會將父類的屬性隱藏。調用了父類的構造函數,父類的構造函數中調用了callName方法,此時父類中的baseName的值為base,可是子類重寫了callName方法,且調用父類Base中的callName是在子類Sub中調用的,因此當前的this指向的是子類,也就是說是實現子類的callName方法。可見,在baseName=“sub”執行前(子類賦值語句),子類的callName()已經執行,所以子類的baseName為默認值狀態null。
以上就是動力節點java培訓機構的小編針對“攜程java筆試題,據說這道題沒幾個人做對”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習