父类为什么不能强转为子类

本文探讨了Java中为什么父类不能强制转换为子类,即使子类没有添加额外的变量和方法。原因在于这种转换可能导致内存空间不足,且允许父类到子类的转换可能引入类型安全问题,例如不同子类对象间的转换混乱。这一限制是由编译器为了性能和类型安全而设定的。
摘要由CSDN通过智能技术生成

父类为什么不能强转为子类

网上解释如下:由于父类在创建对象时就分配了内存空间,子类的内存空间是一定大于父类的内存空间的,当父类强转为子类后就会发生内存空间不够时事情,因此不可强转。

于是我产生了一个疑惑,那子类不新增变量和方法,和父类需要的空间保持一致,就可以强转成功了?

事实上,是不可以的。

/**
 * 子类继承父类,不新增任何变量和方法
 */
@Data
public class SmsSendSon extends SmsSendFather{
}

运行错误截图
所以,到底是什么拒绝了父类强转为子类?

是编译器。

实际上,这是处于性能的考虑所设定的一条“法律”。

由于向上转型存在,一旦添加父类到子类的强转的特性,“同一父类的不同子类的互相转换”场景将灾难性地多。
比如,父类是动物,存在移动方法,子类存在鸽子和猫,鸽子有飞行方法,猫有抓老鼠的方法,你创建了一个猫实例对象强转成动物然后又强转成鸽子,然后对这个对象调用飞的方法。

ps:如果我有不全面的地方,欢迎大家一起交流。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值