instanceof 简介

instanceof 是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型

以下是继承的示例,实现类implements也是一样的。

class Animal {}
class Dog extends Animal {}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog instanceof Dog);  // true,因为dog是Dog类的实例
        System.out.println(dog instanceof Animal);  // true,因为Dog是Animal的子类,dog也是Animal的实例
    }
}

 在向下转型中的应用示例

  • 假设存在一个动物类的集合,其中有狗和猫(Cat),我们想要把狗找出来并进行狗特有的操作。
  • 在这个例子中,我们首先使用instanceof检查Animal类型的对象是否是Dog类型。只有当对象是Dog类型时,我们才进行向下转型,将Animal对象转换为Dog对象,然后调用Dog类特有的bark方法。这样可以避免在对象不是Dog类型时进行错误的向下转型,导致ClassCastException异常
class Animal {}
class Dog extends Animal {
    public void bark() {
        System.out.println("Woof!");
    }
}
class Cat extends Animal {}
import java.util.ArrayList;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Animal> animals = new ArrayList<>();
        animals.add(new Dog());
        animals.add(new Cat());
        for (Animal animal : animals) {
            if (animal instanceof Dog) {
                Dog dog = (Dog) animal;  // 向下转型,先使用instanceof判断
                dog.bark();
            }
        }
    }
}

 业务场景:想类型安全的向下转型,例如:交通工具-汽车-自行车。动物-猫-狗。当存在继承层次结构并且希望根据对象的实际类型来执行不同的行为时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值