父类无法强转为子类的个人理解

人生中的第一篇博客,之所以开始写博客,目的有二:
1.自我学java以来,基本上都是踩在诸位博主的肩膀上前行,(这里我用踩,希望大家不要介 意,我找不到第二个比较合适的动词了,如果用“站”,我不动了吗?)在这里先谢过诸位。而我多多少少也想回馈一下,让后来人也能踩踩我的肩膀。
2.我目前也是一个弱鸡,把自己的理解共享出来,如果有问题,也希望大家不吝指点,拜谢。

进入正题,这篇博客其实也是站在另一位博主的肩膀上写出来的:
https://blog.csdn.net/feeltouch/article/details/78761644
我看完他的博客后,“子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度.”对这句话里的精度之说,一知半解,于是就结合看过的其他例子,进行了由浅入深的理解,下面是理解的过程。
{
Animal c1 = new Cat();
// Dog d1 = (Dog)c1;
// Dog d2 = new Animal();
Cat c2 = (Cat) c1;

}
我现在还在学习,时间比较紧,所以代码就不写全了,希望看到的诸位能理解。
代码中被注释的两行都是会报错的,不能强转成功。
1.Dog d1 = (Dog)c1;这一句中c1是一个Animal类型的引用(变量),指向的是一个Cat类型的对象,显然猫是不可能强转为狗的,解释起来就是动物中不仅有狗,还有别的动物,不可能来一个动物就说他是狗;

2.Dog d2 = new Animal();这一句就更好理解了,等于把整个动物界都说成是狗,必然不合理。
再回去理解那句话,所谓的损失精度我觉得是针对Dog d2 = new Animal();这句话而言的,就是说说的不够精确,脑子里想要一只狗,却说给我拿只动物过来,基本上是无法实现的。

3.Animal c1 = new Cat();
Cat c2 = (Cat)c1;
这种情况是可以强转成功的,我用下面的方式解释:
下面人带上来一只猫,说:“给您拿来了一只动物。”(Animal c1
主人一看,心里知道是只new Cat())。“拿走,滚。”
下面人带走了。
过了一会儿,主人又想让下人把那只猫拿过来,“把刚才那只给我拿过来。”(Cat c2
下人把猫拿了过来:“主人,拿来了。”这回他们改口叫了。(Cat)c1

只有在父类的引用(变量)本就指向该子类的实例(对象)时,才能将该父类强转为该子类。
这次博客,格式什么的都没用心去完善,对观看的诸位说声抱歉,希望大家能有所收获。共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值