中易网

java中的向上转型和向下转型问题。为什么一步到位的向下转型会报错,而分两步的向下转型却没错

答案:4  悬赏:60  
解决时间 2021-12-15 20:44
BB为子类继承父类AA
情况一:
AA aa=new BB();//向上转型
BB bb=(BB)aa;//强制进行向下转型,把对象aa强制转换成对象bb
情况二:
BB bb=(BB)new AA ();//直接向下转型,调用方法报错
最佳答案
情况1: aa保存的是一个BB类型的实例,在编译过程中引用为AA类型,数据存储过程中含有全部BB类的方法和变量;bb只是把aa从AA类型的引用重新定义为BB类型的引用,由于aa中包含BB类的全部方法和变量,所以转型没有问题

情况2: new AA() 中可能不包含BB类的全部变量和方法,强制转换无法实现

思考方法:JAVA中的变量名看成数据指针,new 是在内存中实际的创造一个实例。当创造了一个子类的实例时,指针类型是父类或子类都没有关系。但父类的实例不可能用子类的指针来表达。
全部回答
哪个说的 如果你需要使用多态,那么就应该向上转型,至于为什么使用多态,什么时候使用,只有自己慢慢琢磨,也不用刻意去琢磨,时间久了,代码量多了,自己慢慢就会有感觉了 向下转型是不安全的,当然,如果你已经确定他是这个子类了,就可以向下转,如果你使用了多态,而又用到了向下转型,那么你可以考虑下你的设计是否有问题了 继承少用,多用实现(不能滥用) 如果你用了向下转型,那么当初是为了什么而向上转型呢?考虑下这个问题。 像反序化就要向下转型为自己的子类,因为反序列化得到的是一个object 从集合取出元素也要向下转型,你可能说不用呀,那是java帮你做了,泛型都是使用object的擦除来实现的。
因为前一个实际指向一个BB的实例。后者不是。 instanceof 返回 true的才能强制转型。
强制转型这个叫法来自过去非面向对象的时候吧,对于面向对象来说,只有基本类型 int/float/long/double 之类的数据类型还可以像以前一个叫强制转型,因为它确实是转了型,你想一个 int 在内存里面的二进制布局和 float/double 的 IEEE 浮点格式的二进制布局肯定不同啊。所以需要转型的,这个转型在 int/long 与 float/double 之间转型时会导致永久性的物理性的变化。 而面向对象据说的向下强制转型则不同于基本类型的转型,面向对象的抽象类型的转型本身并不能改变对象的类型,仅仅是把之前由于向上转换而产生的暂时性的隐藏了子类的方法和属性的效果还原成原来的样子。比如 Parent p = new Child() 这将导致 Child 的某些属性和方法在 Parent 中没有而暂时隐藏了,因为你还是可以通过 Java 反射调用的,只是编译器会检测如果你直接调用了 child 的方法(不是通过反射)就会出错,这就是实质上那个 p 还是 Child 类型,只是能不能把它当成 child 来使用。编译器来做这个检查。你明白的是那个对象本身并没有任何变化。 你也可以通过 new String("一个字符串不可能是 Double 的子类") instanceof java.lang.Double 来判断,编译器能立即检测到一个字符串不可能是 Double 的子类而报错。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
想送给一个喜欢的女生一个小礼物,不要花太多
村之间四至界线的作用?
香馥的意思是什么啊?请解释下!
内江市国土局办公地址在什么地方,我要处理点
刚买的小米路由器mini到货了,可是怎么安装第
科龙KFR-50LW/EFQSA3z多少钱
行勘的意思是什么?行勘的释义是什么啊?
我要用(我爱你路娟娟)作一首藏头诗
资中县国土资源局地址有知道的么?有点事想过
问道手游游戏号价值鉴定
电热毯的电阻丝断了,如果将电阻丝的两个电断
画可的意思是什么啊?请解释下!
吁留的意思是什么?吁留的释义是什么啊?
东兴区国土资源执法监察大队办公地址在什么地
成本主办工作总结
推荐资讯
陳政的意思是什么?陳政的释义是什么啊?
、以下关于switch语句和break语句的描述中正
如何让电子电表不走
对付只能在暗地搞小动作的人应该怎么做
抢风梁村怎么去啊,有事要去办理
以恐龙为题做课前一分钟演讲范文三年级
提手旁缀的右半部分是什么字
無全的意思是什么?無全的释义是什么啊?
馬騾的意思是什么?馬騾的释义是什么啊?
辽阳市太子河区农林水利局地址有知道的么?有
盱眙县工商局马坝分局地址在哪,我要去那里办
点充的意思是什么?点充的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?