[軟構筆記]3.4節關於重載和重寫的一點疑惑

[軟構筆記]3.4節關於重載和重寫的一點疑惑

關於重載:
在這裏插入圖片描述
可見
ua.doStuff(animalRefToHorse);輸出的是“animal”,這裏雖然參數animalRefToHorse被賦值了一個Horse(),但是在傳參數的時候,他還是作爲一個Animal變量被識別。

再看
在這裏插入圖片描述
但是這裏gm.type();,gm是一個Game對象,但是被賦值了一個game的子類型Cricket對象,gm.type()用的卻是子類型的方法,與上一個圖的情況截然相反。

仔細查看可見才發現原來這個解釋在之前重載的部分有描述了:
在這裏插入圖片描述
於是我們的疑惑就得到了解答,第一個圖是重載方法,是根據編譯階段傳入的引用數據類型來決定調用的:如下
在這裏插入圖片描述
但是第二個圖是重寫方法:是在運行時基於對象類型動態分配的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章