养成一个好习惯:在向下转型时,都需要使用instanceof判断一下,避免ClassCastException出现。
向下转型的风险:
Animal a2 = new Bird();
Cat c2 = (Cat) a2;
/*
编译通过,运行报错
java.lang.ClassCastException 类型转换异常
*/
如何避免这个风险?--------instanceof
-
instanceof可以在运行时动态判断引用指向的对象的类型
-
instanceof语法:
引用 instanceof 类型
-
instanceof运算符的结果只能是true/false
-
c是一个引用,指向一个对象,Cat是一个类
c instanceof(Cat) 就可以判断c是不是Cat类型
使用场景:
if( c instanceof(Cat)){
Cat ca = (Cat) c; //先判断c是不是一个Cat,如果是才把他向下转换成Cat
ca.catMosue();
}