java 向下转型报错_java温习*(13):关于向下转型易出现错误总结

1、向下转型需在满足向上转型前提下进行

譬如:如下图所示代码中,父类Person及两个子类Chinese,French,子类中既有重写父类的方法,又有各自独立的方法。

682033371eeef24dec4a36da3857e641.png

测试类中:先经过向上转型设置one指向Chinese,后由French强转one,此时虽然编译不会报错,但会产生运行时异常。

6db1a0401cb802ad29b03c4ed01ff76c.png

4b92558c4e0927d2a2a56f105d850f8b.png

因此:请注意,向下转型时,不允许转为非原始类型,即“哪来回哪去”

2、类型转换时的括号应用

接上面父类Person及两个子类Chinese,French代码,此时测试类中,先经过向上转型设置one指向Chinese,后希望实现强转回Chinese进而调用独有的Taijiquan方法。由下图可见,编译时即产生异常。

3fb9653232adaff6128a88d1a586686d.png

原因为:此时由于运算符优先级,会优先执行one.Taijiquan(); 该方法运行后才会进行Chinese类型转换。但经过上一步的向上转型,one无法调用Chinese特有的Taijiquan方法。

6d2d6b1e4be9e056d6ecbff67f1c4994.png

修订方法:

f03fa691e730653268b69eb344436b31.png

此时会在执行完Chinese类型转换后,才会进行Taijiquan方法。

dbb2183efdefebba005343f655b7b323.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值