在之前,我們講Java包裝類得時候,大概瞭解瞭如果把一個字符串類型的數值轉換成int類型,這樣也叫做類型轉換。
如果不瞭解什麼是Java的包裝類,可以查看我之前寫的Java包裝類和基礎數據類型
我們可以用Integer類的方法來轉換類型。
String str="100";
int n=Integer.valueOf(str);
System.out.println(n);
但是我們現在要講的是Java多態對象的類型轉換。
這裏所說的對象類型轉換,是指存在繼承關係的對象,不是任意類型的對象。當對不存在繼承關係的對象進行類型轉換時,Java運行會拋出 java.lang.ClassCastException 異常。
在繼承鏈中我,我們將子類向父類轉換稱爲“向上轉型”,將父類向子類轉換稱爲“向下轉型”。
很多時候,我們會將變量定義爲父類的類型r,確引用子類的對象,這個過程就是向上轉型。程序運行時通過動態綁定來實現對子類方法的調用,也就是多態性。
然而有些時候爲了完成某些父類沒有的功能,我們需要向上轉型的子類對象再轉成子類,調用子類獨有的方法,這就是向下轉型。
注意:不能直接將父類的對象強制轉換成子類對象,只能將向上轉型後的子類對象再轉換成子類類型。也就是說,子類對象必須向上轉型後,才能向下轉型。
public class Demo1 {
public static void main(String[] args) {
Father father=new Father();
Son son=new Son();
//向上轉型
Father father1=son;
//不能直接向上轉型,會拋 java.lang.ClassCastException 異常
//Son son1=(Son)father;
//需要先向上轉型,才能向下轉型
father=son;
Son son2=(Son)father;
}
}
class Father { }//父類
class Son extends Father { }//子類