1.什么時候需要用到強制類型轉換
當把子類變量賦給父類引用變量時,這個父類引用變量只能調用父類擁有的方法,
不能調用子類特有的方法,即使它實際引用的是子類變量。
如果需要讓這個父類引用變量調用它子類的方法,就必須把它強制轉換成子類類型。
2.引用類型之間要強制轉換成功需要有什么條件
把父類實例轉換成子類類型,則這個對象必須實際上是子類實例才行,否則將在運行時引發ClassCastException。
3.讓程序更健壯的寫法:
在強制轉換前使用instanceof運算符判斷是否可以成功轉換。
示例如下:
1 class Base 2 { 3 private int value; 4 public void say() 5 { 6 System.out.println("Base class"); 7 } 8 } 9 10 class Sub extends Base 11 { 12 public void say() 13 { 14 System.out.println("Sub class"); 15 } 16 //子類的特有方法 17 public void read() 18 { 19 System.out.println("Are you sleeping?"); 20 } 21 } 22 public class Test 23 { 24 public static void main(String[] args) 25 { 26 Base base=new Sub(); 27 base.say();//多態,會調用子類的方法 28 29 if(base instanceof Sub)//先判斷能否轉換成功 30 { 31 ((Sub)base).read();//強轉過后才可以調用read方法 32 } 33 34 } 35 }
總結:
兩種可能混淆的情況:
把子類對象sub賦值給父類對象base,如果調用base中子類和父類都擁有的方法(子類重寫的父類方法),那么這時實際上執行的是子類的方法,
這種現象叫做多態;
如果想用base對象調用子類特有的方法,就必須把base對象強轉成子類對象后,才可以調用。