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字符串,再赋值转换成子类对象
本文作者:—清风碎心—
本文链接:https://www.cnblogs.com/zhy-god/p/14812408.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步