Java中父類與子類的轉換關系 | 父類強轉子類


父類轉子類

  • 父類強轉子類的要求:父類必須是子類的實例,(換句話說就是需要強轉的父類必須是子類構造出來的,它本身就是子類的實現)
  • 原理:父類的實現是父類的實例,和子類沒有關系,不能直接強轉
  //AA 父類
  public class AA {
    private String aa;

    public AA(){
        this.aa = "AA";
        System.out.println("父類構造");
    }
  //toString
  }
  //CC 子類
  public class CC extends AA{
      public CC() {
          System.out.println("CC子類構造");
      }
  }
  • 父類對象是子類實現 父類對象可以強轉為子類對象
  public class BB {
      public static void main(String[] args) {
          //父類對象是子類實現
          AA a = (AA) new CC();
          //父類可以強轉為子類
          CC cc = (CC) a;
          System.out.println(cc.toString());
      }
  }

  • 父類對象是父類實現 不能轉為子類對象
  public class BB {
    public static void main(String[] args) {
        //父類對象是父類實現
        AA a =  new AA();
        //父類不可以強轉為子類
        CC cc = (CC) a;
        System.out.println(cc.toString());
    }
}

  • Exception in thread "main" java.lang.ClassCastException: com.zhy.test.AA cannot be cast to com.zhy.test.CC
  • 根本原因,這個 a 實現和子類就沒關系(你出去可以代表你爸,你爸還沒生你呢怎么代表你)

解決方法:

  • 主要的解決方法是規規矩矩按子類實現來
  • 如果特殊情況可以先把父類轉成json字符串,再賦值轉換成子類對象


免責聲明!

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



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