當衍生/繼承Class有與基礎Class有相同簽名(signature)的成員,就會牽涉到override/new來決定指鹿為馬的時候的行為
範例 程式(C#6.0), 專案, 執行檔
override/複寫/: 以B型態呼叫D物件,會呼叫到D物件中的成員
*在D物件中宣告成員為override須將對應的B物件成員設為virtual
*virtual是一種警告,警告呼叫此成員的行為會依物件的型態(而不是呼叫型態而定)
new/隱藏/: 以B型態呼叫D物件,會呼叫到B物件中的成員
馬
叫
鹿:馬 //鹿是一種馬
叫
有一隻鹿,我們可以當他是馬叫她小馬,或當他是鹿,叫他斑比
鹿 斑比 = 一隻鹿;
馬 小馬 = 斑比;
如果鹿叫是用override
不論你叫她小馬或叫他斑比他都是叫得像鹿
但若今天鹿叫是用new
你叫她小馬,他就會像馬一樣叫
你叫他斑比,他就會像鹿一樣叫
這項規則不只適用於外部呼叫,內部呼叫也是一樣
如果在"叫"裡面需要呼叫"吸氣",當呼叫小馬"叫",而叫是new(會呼叫馬的"叫")時,叫中的"吸氣"有virtual的時候一樣會去搜尋"鹿"有沒有override"吸氣"成員
沒有留言:
張貼留言