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

本文探讨了Java中类型转换的概念,特别是向上转型与向下转型的区别,并介绍了如何使用instanceof运算符来确保类型转换的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

引用类型转换

1、向上类型转换(自动/隐式类型转换),是小类型转化成大类型,不存在认了风险。即子类型对象也是父类型

代码:

      Animal d = new Dog();

      这就自动转的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值