引用類型的強制類型轉換

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對象強轉成子類對象後,才能夠調用。

相關文章
相關標籤/搜索