面试题答案
一键面试- 去掉
if (animal instanceof Dog)
直接向下转型的情况:- 如果直接进行
Dog dog = (Dog) animal;
,代码在运行时,如果animal
实际指向的对象确实是Dog
类型,那么转型会成功,dog.bark()
可以正常调用。 - 但是,如果
animal
实际指向的对象不是Dog
类型(比如指向Cat
类型),就会抛出ClassCastException
异常。因为Java在运行时会检查对象的实际类型,不允许将不兼容的类型进行强制转换。例如:
- 如果直接进行
Animal animal = new Cat();
Dog dog = (Dog) animal; // 这里会抛出ClassCastException
instanceof
在这种情况下的作用:instanceof
运算符用于在运行时检查一个对象是否是某个特定类(或其子类)的实例。- 在代码
if (animal instanceof Dog)
中,它可以在进行向下转型之前先判断animal
实际指向的对象是否是Dog
类型。如果是,再进行向下转型,这样可以避免抛出ClassCastException
异常,增加了程序的健壮性。例如:
Animal animal = new Cat();
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
} else {
System.out.println("animal is not a Dog");
}
这样,当animal
不是Dog
类型时,程序不会因为强制转型失败而崩溃,而是可以进行相应的处理。