1.何時須要用到強制類型轉換spa
當把子類變量賦給父類引用變量時,這個父類引用變量只能調用父類擁有的方法,code
不能調用子類特有的方法,即便它實際引用的是子類變量。對象
若是須要讓這個父類引用變量調用它子類的方法,就必須把它強制轉換成子類類型。blog
2.引用類型之間要強制轉換成功須要有什麼條件io
把父類實例轉換成子類類型,則這個對象必須其實是子類實例才行,不然將在運行時引起ClassCastException。ast
3.讓程序更健壯的寫法:class
在強制轉換前使用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對象強轉成子類對象後,才能夠調用。