1. 向上轉(zhuǎn)型:父類的對象名? 真正指向了 子類的實體? ? ? 叫做 向上轉(zhuǎn)型。所以向上轉(zhuǎn)型必須在繼承關系中才成立。
比如 父類是Animal ?子類 Dog
Animal animal = new Dog();
父類中有eat方法 子類也有 的話,此時animal.eat()調(diào)用的是子類Dog類中的。
? ? ? ? ? ? ? ? ? ? ? ? ? ?如果子類沒有的話,調(diào)用的就是Animal父類的eat方法
但是 animal對象不能調(diào)用子類特有的方法
2.向下轉(zhuǎn)型:為了解決父類對象名不能調(diào)用子類特有的方法,則需要向下轉(zhuǎn)型。
即Dog dog1 = (Dog) animal;
在此過程中,也許會出現(xiàn)ClassCastExecption? 類型轉(zhuǎn)換異常,這通常發(fā)生在 向下轉(zhuǎn)型時 ,轉(zhuǎn)成的類 并不是對象的真正的實體的類型,則需要判斷一下,用instanceof :
dog1 instanceof Dog
向上轉(zhuǎn)型: 減少冗余代碼, 提高代碼的復用性
向下轉(zhuǎn)型: 因為 父類的對象不能調(diào)用子類特有的方法,向下轉(zhuǎn)型成為子類就可以調(diào)用子類的特有的方法
注意:
*? 必須是繼承關系中才能夠向上轉(zhuǎn)型
*? 向下轉(zhuǎn)型的前提條件: 現(xiàn)象上轉(zhuǎn)型? 再向下轉(zhuǎn)型