1.多態的體現:
父類引用指向子類對象
2.多態的前提:
類與類之間存在關係,繼承或者實現關係
3.多態的好處:
提高了程序的擴展性
4.多態的弊端:
只能用父類的引用訪問到父類的成員
多態成員的特點:
編譯期間:參閱的是引用型變量所屬類中是否有調用的方法
運行期間:參閱的是對象所屬得到類中是否有調用方法
舉例說明:新建animal基類,cat和dog子類
2.新建一個共有的function 參數類型是基類,當我們調用此方法 參數傳入子類的時候 相當於new一個子類對象向上轉型成基類,animal基類則是引用型變量
調用此函數,則函數成員必須存在於基類中(編譯期間的特點),若基類中不存在此函數,或者只存在子類中還是會報錯。(基類中無show方法,子類中存在)
3.運行此程序,控制檯顯示結果如下 雖然相當於向上轉型成基類,當運行的是子類的show方法,而不是基類的“吃飯” 相當於重寫基類的方法(運行期間)。
4.當子類沒有此方法時會直接運行基類的方法(繼承關係) 子類沒有sing方法。基類中存在
顯示結果如下:
整體來說,多態的存在增加了程序的擴展性,通過重寫基類中的方法實現。
5.父類的引用只能訪問到父類成員 新建成員變量name 傳入不同的引用型變量a,b輸出:
並未輸出貓狗。若要訪問子類成員 則需要強制類型轉換 如下:
注意紅色標記處,強制類型轉換後可以訪問到“貓” 發生類型轉換錯誤(classCastException)是因為 cat和dog不存在關係,所以不匹配。
閱讀更多 十二說IT 的文章