下面代碼的輸出結果【中國臺灣著名殺毒軟件公司 面試題】
答案
classB
classB
classA
有疑問的話也就是第二個輸出,
其實子類強轉為父類其實是為了迷惑大家,強轉操作是沒有必要的。
這時就非常簡單了,Java的多態所以輸出classB
我們再看另外一道題
下面程序的輸出結果是什麼?【中國著名門戶網站公司 校招筆試題】
A、 Father Father B、 Father Child C、編譯失敗 D、以上答案都不對
解析:
答案應該是A。
兩個getName方法是靜態方法,在內存中的地址空間是固定的,不會衝突。
兩個方法再內存中佔用不同的空間,具體執行哪一個,則要看由哪個類來調用。
因為是靜態方法且引用都是Father,所以只會調用Father的方法
如果換成下面寫法(去掉static)
答案選擇B.
總結
多態子父類的類型轉換
在多態中,
成員函數在多態調用時,編譯看左邊,運行看右邊。
成員變量:無論編譯和運行,都參考左邊(引用型變量所屬的類)。
靜態成員函數:無論編譯和運行,都參考做左邊。
歡迎加入Java學習群:116291581 一起探討交流。
群裡有已經在公司工作的大牛,也有初學Java的新手。
也有很多在校大學生、研究生。
閱讀更多 明明如月學長 的文章