今日內容:
三大特徵---多態引用類型轉換教學目標:
能夠說出使用多態的前提條件理解多態的向上轉型理解多態的向下轉型一、多態
1.概述
引入:多態是繼封裝,繼承之後,面向對象的第三大特性
在日常生活當中以走路跑步為例子,各種動物的不同跑起來是不一樣的。用飛為例子的話,飛機與鳥的飛行也是不一樣的。所以,通過不同的事物,可以體現出來的是不同的形態。多態就是描述這樣的狀態。
定義多態:是指的同一行為具有多個不同表現形式
前提【重點!】
繼承或者是實現【二選其一】方法的重寫【意義體現:不重寫,無意義】父類引用指向子類對象【格式體現】2.多態的體現
多態體現的格式:
父類類型:指子類對象繼承的父類類型,或者是實現父的接口類型
代碼如下所示:
當使用多態方法調用方法的時候,首先要檢查父類中是否有該方法,如果沒有這個方法,那麼編譯錯誤;如果有的話,執行的是子類重寫以後的方法。
定義父類:
定義子類:
定義測試類:
3.多態的好處
我們在實際的開發過程中,父類類型作為方法形式參數,傳遞子類給對象方法,進行方法的調用,更能體現出多態的擴展性與便利,定義父類代碼如下:
定義子類:
定義測試類:
由於多態特性的支持,showAnimalEat方法的Animal類型,是Cat和Dog的父類類型,父類的類型接收子類對象,也可以把Cat對象和Dog對象,傳遞給方法。
當eat方法執行的時候,多態規定,執行的是子類重寫的方法,那麼效果自然就是與showCatEat、showDogEat方法一致,所以showAnimalEat都可以完成
這裡可知多態的好處,體現在於可以讓寫程序變得更簡單,並有良好的拓展
4.引用類型的轉換
多態的轉型分類為向上和向下兩種類型:
向上類型:多態本身就是子類類型的向上轉換的過程,這個過程是默認的
當父類引用指向一個子類對象的時候,就是向上轉型;格式如下:
向下轉型:父類類型向子類類型向下轉換的過程中,這個過程是強制的
一個已經向上轉型的子類對象,將父類引用轉為子類引用,可以使用強制類型轉換的格式,便是向下轉型。使用格式如下:
為什麼要轉型?
當我們子啊使用多態方式去調用方法的時候,首先要檢查父類中是否有這個方法,如果沒有,那麼編譯會出現錯誤。也就是說,不能調用子類擁有,而父類沒有的方法。編譯都是錯誤的,就不要再說運行了。這也是多態給我們的一些小麻煩,所以想要調用子類特有的方法,必須做向下的轉型。
那麼轉型演示的代碼,如下所示:
定義測試
轉型的異常:
轉型的過程中,很容易不小心就遇到這樣的問題,代碼如下:
這段代碼可以通過編譯,但是運行的時候,卻報出了ClassCastException,類型轉換異常!這事因為,我們明明創建了Cat但是在運行的時候,當然態轉換成Dog的對象。這兩個類型並沒有任何繼承的關係,不符合類型轉換的定義。
為了避免ClassCastException這樣的情況,Java提供了一個關鍵字給我們,就是:instanceof,給引用變量做類的校驗,格式如下:
所以我們在轉換之前,最好先自己最一個判斷,如下所示:
下一篇文章我們會給大家分享接口多態的綜合案例,請關注我們哦~