多態(tài)存在的三個必要條件
繼承
重寫
父類引用指向子類實例化對象 :Parent p = new Child();
當(dāng)使用多態(tài)方式調(diào)用方法時,
首先檢查父類中是否有該方法骡苞,如果沒有巷嚣,則編譯錯誤喘先;
如果有,再去調(diào)用子類的同名方法廷粒。記拙秸!坝茎!
用子類的構(gòu)造函數(shù)創(chuàng)建父類類型的對象叫做向上轉(zhuǎn)型
Animal a = new Cat(); // 向上轉(zhuǎn)型 树枫,(先后調(diào)用Cat、Animal 的構(gòu)造函數(shù)景东,繼承的是子類的方法砂轻,但父類中必須也有該方法,無該方法則無法調(diào)用)
Cat c = (Cat)a; // 向下轉(zhuǎn)型斤吐,(將a中的變量值賦給c,此時c可以調(diào)用父類沒有的方法)
虛函數(shù)
虛函數(shù)的存在是為了多態(tài)搔涝。
Java 中其實沒有虛函數(shù)的概念,它的普通函數(shù)就相當(dāng)于 C++ 的虛函數(shù)和措,動態(tài)綁定是Java的默認行為庄呈。如果 Java 中不希望某個函數(shù)具有虛函數(shù)特性,可以加上 final 關(guān)鍵字變成非虛函數(shù)派阱。
多態(tài)的實現(xiàn)方式
方式一:重寫:
方式二:接口
方式三:抽象類和抽象方法
最常用的實現(xiàn)多態(tài)的方法:使用對象的向上轉(zhuǎn)型來初始化對象诬留。[1]
本章學(xué)習(xí)到此結(jié)束,若想了解其他java知識贫母,歡迎訪問java學(xué)習(xí)之1:總綱文兑。
2019.4.21更新:[1]