多態(tài)
同一個(gè)對(duì)象,在不同的時(shí)刻表現(xiàn)出來(lái)的不同形態(tài)
多態(tài)的前提和體現(xiàn)
- 有繼承/實(shí)現(xiàn)關(guān)系
- 有方法重寫
- 有父(類/接口)引用指向(子/實(shí)現(xiàn))類對(duì)象
多態(tài)中成員訪問(wèn)特點(diǎn)
- 成員變量,編譯看左邊付燥,執(zhí)行看左邊
- 成員方法嗦嗡,編譯看左邊茄厘,執(zhí)行看右邊【重寫的方法】
多態(tài)的優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn):
定義方法時(shí)巨坊,使用父型替代子型作為參數(shù),而在使用時(shí)挂滓,程序識(shí)別到的是具體的子類型參與操作苦银,提高了程序的擴(kuò)展性
-
缺點(diǎn):
不能使用子類的特有功能
多態(tài)中的轉(zhuǎn)型【避開(kāi)多態(tài)缺點(diǎn) ,使用其優(yōu)點(diǎn)】
-
向上轉(zhuǎn)型
父類引用指向子類對(duì)象Animal animal = new Dog();
-
向下轉(zhuǎn)型
父類引用轉(zhuǎn)為子類對(duì)象【只能轉(zhuǎn)換為父類引用對(duì)象的實(shí)際子類赶站,否則就ClassCastException】Dog dog = (Dog)animal;
向下轉(zhuǎn)型使用前可以用以下語(yǔ)句判斷父類引用對(duì)象是否是要轉(zhuǎn)型到的子類
對(duì)象 instanceof 類型