Java 多态中的类型转换(instanceof)

引用类型转换 
1、向上类型转换(自动/隐式类型转换),是小类型转化成大类型,不存在认了风险。即子类型对象也是父类型。 
2、向下类型转化(强制类型转化),大类型转化成小类型,存在一定风向。多态实例后,都可以向上类型转化,但是转化后,子类型对象间的互相转换就会存在一定风险。

如何规避风险? 
使用instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

    //创建子类对象
    Dog dog = new Dog();

    // 向上类型转换(类型自动提升),不存在风险
    Animal animal = dog;

    //风险演示  animal指向Dog类型对象,没有办法转化成Cat对象,编辑阶段不会报错,但是运行会报错
    Cat cat = (Cat)animal;// 1.编译时 按Cat类型  2. 运行Dog类型  类型不匹配。直接报错

 规避风险,提高程序安全性

   //创建子类对象
    Dog dog = new Dog();

    // 向上类型转换(类型自动提升),不存在风险
    Animal animal = dog;


    // 向下类型转换(存在一定风险) 我们可以强制转换
    if(animal instanceof Dog){

        Dog  dog2 = (Dog)animal; 

        System.out.println("转化类型成功");

    }else{

        System.out.println("向下类型转化失败"+animal.getClass());
    }


    //规避风险 (instanceof运算符)
    if(animal instanceof Cat){

        Cat cat  = (Cat)animal;
        System.out.println("转化类型成功");

    }else{

        System.out.println("转化类型失败"+animal.getClass());

    }

 

总结 : 
1> instanceof 的作用是 测试它左边的对修 是否 是它右边的类的实例。 
2> 在编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使他实际所引用的对象确实包含该方法。如果需要让这个引用变量来调用它运行时类型的方法,必须使用强制类型转换把他转换成运行时类型。然而,在强制转换的过程中,是有可能出现类型强制转换异常(ClassCastException),规避他的方法也很简单,利用instanceof关键字来判断是否是本类对象,如果成立的化,再进行强制类型转换。 
instanceof 相当于oc语言中的 isMemberOfClass

 

转自:https://blog.csdn.net/qq_18505715/article/details/72631576

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值