父类转子类
- 父类强转子类的要求:父类必须是子类的实例,(换句话说就是需要强转的父类必须是子类构造出来的,它本身就是子类的实现)
- 原理:父类的实现是父类的实例,和子类没有关系,不能直接强转
//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字符串,再赋值转换成子类对象
-
参考链接:https://www.cnblogs.com/zhy-god/p/14812408.html