多態的轉型可以分爲向上轉型與向下轉型兩種:
向上轉型:當有子類對象賦值給一個父類引用時,便是向上轉型,多態本身就是向上轉型的過程。
使用格式:
父類類型 變量名 = new 子類類型();
如:Person p = new Student();
向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用轉爲子類引用,這個過程是向下轉型。如果直接創建父類對象,是無法向下轉型的!
使用格式:子類類型 變量名 = (子類類型) 父類類型的變量;
如: Student stu =(Student) p; //變量 p 實際上指向Student 對象
什麼時候使用向上轉型:
當不需要面對子類類型時,通過提高擴展性,或者使用父類的功能就能完成相應的操作,這時就可以使用向上轉型
如 :Animal a = new Dog();
a.eat();
什麼時候使用向下轉型
當要使用子類特有功能時,就需要使用向下轉型。
如:Dog d = (Dog)a;//向下轉型
d.lookHome();//調用Dog類的lookHome 方法
向下轉型的好處:可以使用子類特有的功能
弊端是:需要面對具體的子類對象;在向下轉型時容易發生ClassCastException類型轉換異常。在轉換之前必須做類型判斷
if(!(a instanceof Dog)){//判斷當前對象是否爲Dog類型
System.out.println("類型不匹配,不能轉換");
return;
}