關於oop中多態相關問題的概述

1.多態的體現:

父類引用指向子類對象


2.多態的前提:

類與類之間存在關係,繼承或者實現關係

3.多態的好處:

提高了程序的擴展性

4.多態的弊端:

只能用父類的引用訪問到父類的成員

多態成員的特點:

  1. 編譯期間:參閱的是引用型變量所屬類中是否有調用的方法

  2. 運行期間:參閱的是對象所屬得到類中是否有調用方法

舉例說明:新建animal基類,cat和dog子類

關於oop中多態相關問題的概述

2.新建一個共有的function 參數類型是基類,當我們調用此方法 參數傳入子類的時候 相當於new一個子類對象向上轉型成基類,animal基類則是引用型變量

關於oop中多態相關問題的概述

調用此函數,則函數成員必須存在於基類中(編譯期間的特點),若基類中不存在此函數,或者只存在子類中還是會報錯。(基類中無show方法,子類中存在)

關於oop中多態相關問題的概述

3.運行此程序,控制檯顯示結果如下 雖然相當於向上轉型成基類,當運行的是子類的show方法,而不是基類的“吃飯” 相當於重寫基類的方法(運行期間)。

關於oop中多態相關問題的概述

關於oop中多態相關問題的概述

4.當子類沒有此方法時會直接運行基類的方法(繼承關係) 子類沒有sing方法。基類中存在

關於oop中多態相關問題的概述

關於oop中多態相關問題的概述

顯示結果如下:

關於oop中多態相關問題的概述

整體來說,多態的存在增加了程序的擴展性,通過重寫基類中的方法實現。

5.父類的引用只能訪問到父類成員 新建成員變量name 傳入不同的引用型變量a,b輸出:

關於oop中多態相關問題的概述關於oop中多態相關問題的概述

並未輸出貓狗。若要訪問子類成員 則需要強制類型轉換 如下:

關於oop中多態相關問題的概述

注意紅色標記處,強制類型轉換後可以訪問到“貓” 發生類型轉換錯誤(classCastException)是因為 cat和dog不存在關係,所以不匹配。


分享到:


相關文章: