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字符串,再赋值转换成子类对象
posted @ 2021-05-26 10:46  —清风碎心—  阅读(3046)  评论(0编辑  收藏  举报