引用類型的強制類型轉換


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對象強轉成子類對象后,才可以調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM