父类对象到底能不能强制转换为子类对象
来源:互联网 发布:知之深爱之初 编辑:程序博客网 时间:2024/06/06 03:45
首先是可以的。前提是:此父类对象为子类对象强转的结果 例如:
Father father = (Father)son;
当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去
if(father instanceof Son)
Son son =(Son)father;
Father father = (Father)son;
当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去
if(father instanceof Son)
Son son =(Son)father;
除此之外,不行。
往深了讲。子类强制转换为父类对象时,并没有实际丢失它原有内存空间(比父类多的那些部分)只是暂时不可访问。所以能再转回来。
另:父类对象可接受任何子类对象--此时发生自动转型--》转为父类类型--》所以能够再转回来。用instanceof 是防止错误的一种方式。
另外,参考如下博客内容:
https://www.cnblogs.com/hanbin/p/4780607.html
之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象?
到底能不能, 今天就来说说这个问题, 先看下面一段代码:
package cn.com.hanbinit.test;/** * 检验父类是否可以强转为子类 * @author icer * */public class ConvertPro extends Father { public static void main(String[] args) { Father father = new Father(); Father father1 = new ConvertPro(); ConvertPro son = new ConvertPro(); // ConvertPro son1 = (ConvertPro) new Father(); // son = (ConvertPro)father; son = (ConvertPro) father1; }}/** * 父类 * * @author icer * */class Father { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
上面代码注释掉的两行是会运行错误的. 根据代码显示, 只有我们的父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.
子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度. 但是如果父类对象本身就是用
子类去new出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.
阅读全文
0 0
- 父类对象到底能不能强制转换为子类对象
- 父类对象 到底能不能强转换为 子类对象
- 父类对象不能强行转换为子类对象
- java 父类强制转换为子类
- C++父类强制转换为子类用法
- 父类指针强制转换为子类指针
- COM 对象强制转换为接口类型问题
- JAVA父类对象与子类对象-造型转换
- JAVA父类对象与子类对象-造型转换[转]
- JAVA父类对象与子类对象-造型转换
- 错误 强制类型转换错误 查出来是对象类 无法强制转换为list
- C#父类强制转换子类
- C#父类强制转换子类
- 父类和子类转换浅谈篇(将子类对象赋值给父类对象)
- 父类和子类转换浅谈篇(将子类对象赋值给父类对象)
- java对象强制转换
- 对象的强制转换
- Java子类与父类之间的对象转换
- leetCode-Find Minimum in Rotated Sorted Array
- android studio调试APK时出现Install failed的问题
- Flask_入门之 动态传递参数
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数
- 检测评价函数 intersection-over-union ( IOU )
- 父类对象到底能不能强制转换为子类对象
- 磁盘共享之NFS
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换
- 第十一周项目一——图基本算法库
- UVALive 7960|Gym 101201I|Postman|贪心
- 【Scikit-Learn 中文文档】数据集加载工具
- 通过@ConfigurationProperties使用外部配置填充Bean属性的几种方法
- 单源点最短路径(弗洛伊德)
- zip伪加密