下面的文章要給大家繼續介紹的就是java對象類型轉換的強制對象類型轉換方面的知識,一起來看看吧。
Java編譯器允許在具有直接或間接繼承關系的類之間進行類型轉換。
對于向下轉型,必須進行強制類型轉換;對于向上轉型,不必使用強制類型轉換。
例:
對于一個引用類型的變量,Java編譯器按照它聲明的類型來處理。
假如,使用animal調用str和eatMethod()方法将會出錯。
如下:animal.str = ""; // 編譯出錯,提示Animal類中沒有str屬性
animal.eatMethod(); // 編譯出錯,提示Animal類中沒有eatMethod()方法
假如要通路Cat 類的成員,那麼就必須要通過強制類型轉換。
如下:((Cat)animal).str = ""; // 編譯成功
((Cat)animal).eatMethod(); // 編譯成功
将Animal對象類型強制轉換為Cat對象類型,這個時候上面兩句編譯成功。
對于如下語句,因為使用了強制類型轉換,是以也會編譯成功。
例如:Cat cat = (Cat)animal; // 編譯成功,将Animal對象類型強制轉換為Cat對象類型
類型強制轉換時想運作成功就必須保證父類引用指向的對象一定是該子類對象,最好使用instanceof運算符判斷後,再強轉。
例如:Animal animal = new Cat();
if (animal instanceof Cat)
{
Cat cat = (Cat) animal; // 向下轉型
...
}
子類的對象可以轉換成父類類型,而父類的對象實際上無法轉換為子類類型。
因為通俗地講,父類擁有的成員子類肯定也有,而子類擁有的成員,父類不一定有。
是以,對于向上轉型,不必使用強制類型轉換。
例如:Cat cat = new Cat();
Animal animal = cat; // 向上轉型,不必使用強制類型轉換
假如,兩種類型之間沒有繼承關系,那麼将不允許進行類型轉換。
例如:Dog dog = new Dog();
Cat cat = (Cat)dog; // 編譯出錯,不允許把Dog對象類型轉換為Cat對象類型
關于強制對象類型轉換方面的知識就介紹到這裡了,請繼續關注奇Q工具網吧,有更多的java基礎知識,可以為你分想哦。
推薦閱讀: