8.0、Java继承与多态 - instanceof关键字

8.0、Java继承与多态 - instanceof关键字

        在 Java 中对象可以向上转型和向下转型;

        向上转型 是绝对安全的,用代码来实现其实就是 ->

        父类名 对象名 = new 子类名();就是我们多态的写法;向上转型是绝对安全的,例如 一个抽象类 - 动物类_Animal ,一个子类 - 猫类_Cat extends Animal,向上转型 Animal animal = new Cat();这样是没有任何问题的 [ 其实很好理解,因为猫也可以说成是动物嘛,所以向上转型是绝对安全的;],只是 animal 不能调用 Cat 类中独有的方法;

        然而 向下转型 通俗的来说就是 强制类型转换,用代码来实现就是 ->

Animal animal = new Cat(); // 创建一个 animal 对象
Cat cat = (Cat) animal; //将 animal 对象强制转换为 Cat 类对象

        向下转型不是绝对安全的,如上所述的代码,我们先是将猫向上转型为动物 Animal animal = new Cat();] ,然后将 animal动物 再强制转换回来还原成 猫Cat Cat cat = (Cat) animal; ] 这里注意我的用词是 " 还原 ",也就是说原来是什么就只能强制还原成什么;

         假设我们 动物类_Animal 有两个子类分别是 猫_Cat狗_Dog,如果我们一开始是由 向上转型成为 动物 的,那么向下转型还原的时候就只能将 动物 还原成 猫,而不能还原成 狗;如下代码所示就是错的 ->

Animal animal = new Cat();
Dog dog = (Dog) animal; //在运行时会报错 - ClassCastException
Cat cat = (Cat) animal; //正确写法

instanceof 关键字:

        为了避免出现 ClassCastException 异常,我们在向下转型的时候就得先判断一下该对象原来是否为我们想要还原的类,那怎么判断呢?引出我们的关键字 - instanceof

        使用方法,如下所示 -> 

对象名 instanceof 类名

        该表达式会返回一个 boolean 类型的值,结果为 true 的话原来该对象就是该类型,返回为 false 的话就不是;

        在实际开发中,instanceof 关键字常用在判断形参中的对象原来是什么类型,如下所示 ->

public void pet(Animal animal) {
    if(animal instanceof Cat) {
        Cat cat = (Cat) animal;
        cat.catMethod();
    }
    if(animal instanceof Dog) {
        Dog dog = (Dog) animal;
        dog.dogMethod();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值