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