java 對象之間的轉換

初學java 咱們會聽過一個概念「父類聲明,子類實例化」,其實這就是java對象之間的轉換 。java

對象之間轉換的條件:必須存在繼承關係的對象(不存在繼承關係的對象進行強制轉換會拋出 「 java.lang.ClassCastException」 )spa

轉換的方式有兩種:一、向上轉換,二、向下轉換 對象

  一、向上綁定:父類聲明,子類實例化 就是一種 「向上轉換 」的體現 ,程序運行時,經過動態綁定,來完成經過動態綁定來實現對子類方法的調用繼承

   二、向下綁定io

      有些時候爲了完成某些父類沒有的功能,咱們須要將向上轉型後的子類對象再轉成子類,調用子類的方法,這就是向下轉型。
        注意:不能直接將父類的對象強制轉換爲子類類型,只能將向上轉型後的子類對象再次轉換爲子類類型。也就是說,子類對象必須向上轉型後,才能再向下轉型。請看下面的代碼:編譯

 
  1. public class Demo {
  2. public static void main(String args[]) {
  3. SuperClass superObj = new SuperClass();
  4. SonClass sonObj = new SonClass();
  5.  
  6. // 下面的代碼運行時會拋出異常,不能將父類對象直接轉換爲子類類型
  7. // SonClass sonObj2 = (SonClass)superObj;
  8.  
  9. // 先向上轉型,再向下轉型
  10. superObj = sonObj;
  11. SonClass sonObj1 = (SonClass)superObj;
  12. }
  13. }
  14.  
  15. class SuperClass{ }
  16. class SonClass extends SuperClass{ }

將第7行的註釋去掉,運行時會拋出異常,可是編譯能夠經過。ast

由於向下轉型存在風險,因此在接收到父類的一個引用時,請務必使用 instanceof 運算符來判斷該對象是不是你所要的子類,請看下面的代碼:class

 
  1. public class Demo {
  2. public static void main(String args[]) {
  3. SuperClass superObj = new SuperClass();
  4. SonClass sonObj = new SonClass();
  5.  
  6. // superObj 不是 SonClass 類的實例
  7. if(superObj instanceof SonClass){
  8. SonClass sonObj1 = (SonClass)superObj;
  9. }else{
  10. System.out.println("①不能轉換");
  11. }
  12.  
  13. superObj = sonObj;
  14. // superObj 是 SonClass 類的實例
  15. if(superObj instanceof SonClass){
  16. SonClass sonObj2 = (SonClass)superObj;
  17. }else{
  18. System.out.println("②不能轉換");
  19. }
  20. }
  21. }
  22.  
  23. class SuperClass{ }
  24. class SonClass extends SuperClass{ }

運行結果:
①不能轉換

總結:對象的類型轉換在程序運行時檢查,向上轉型會自動進行,向下轉型的對象必須是當前引用類型的子類。引用

相關文章
相關標籤/搜索