多态中的引用类型转换

  • 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
  • 向下类型转换(强制类型转换),是大类型到小类型的转换

    值得注意的是向上类型转换是不存在风险的,例如将一个杯子里的说倒到水壶里,正常来讲这样是没有问题的,计算机会自动的帮我们执行向上类型的转换所以也被称为自动类型转换。
    而向下类型转换是存在风险的,例如将水壶里的水倒到杯子里面,因为它可能会发生溢出,这种情况也被称为数据的溢出,这样是存在风险的。但是如果程序员愿意做这种事情,我们也可以强制计算机组做这种操作的。但是我们怎么样避免一些风险呢?这里我们就要用到instanceof运算符,来解决引用对象的类型问题,避免类型转换带来的安全性问题。

我们用代码体现一下

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
class test{
     public static void main(String[] args){
         Dog dog = new Dog();
         Animal animal = dog;//向上类型转换 自动类型转换
         Dog dog2 = (Dog)animal;
         //但是如果我们把这个父类的引用转换成Cat类型的引用
         Cat cat = (Cat)animal;//这里编译器没有检查出错误,但是在运行时会报错说没有办法将这个引用进行转换。
         //这是我们就要用到instanceof运算符
         //如果animal对象含有Cat类型的元素 就会返回一个true
         if(animal instanceof Cat){
            Cat cat = (Cat)animal;
        }else{
            System.out.println("无法进行类型转换");
        }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值