SCJP认证 2.5 引用变量强制转换(1)

17 篇文章 0 订阅

目标

5.2 给定一场景,编代码,演示多态性的使用。而且,要判断何时需要强制转换,还要区分于对象引用强制转换相关的编译器错误和运行时错误。

 

当我们希望使用animal引用变量来调用只有Dog类才拥有的方法时,会发生什么情况呢?你知道它引用一个Dog,你想做Dog特有的事情吗?下下面的代码中会得到以组Animal,并且只要在该Animal组中找到一个Dog,我们就像实现Dog特有的事情。现在,除了不能确定调用playDead()方法的代码行意外,我们认可所有代码行都是正确的。

当编译这段代码时,编译器会给出如下信息:

can not find symbol

编译器是在说:“Animal类没有playDead()方法。” 让我们修改if代码块:

上面新改进的代码包含一个强制转换。就这种情况而言 ,有时它称为向下转型,因为是将继承树向下强制转换到更具体的类。现在,编译器会很高兴很高兴地让它通过编译。在尝试调用playDead()之前,我们将animal变量强制转换成Dog类型。

 在执行向下强制转换时,务必牢记,编译器将被迫信任我们——即使我们将事情弄糟也如此:

 

代码通过了编译!但在尝试运行它是,将得到如下异常:

java.lang.ClassCastException

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值