instanceof (运行阶段动态判断)
第一:instanceof运算符可以在运行阶段动态判断引用指向对象的类型
第二:instanceof语法
(引用 instanceof 类型)
第三:instanceof运算符的结果只能是true/false
第四: c是一个引用,c变量保存了内存地址指向了堆中的对象
假设(c instanceof Cat)为true表示:
c引用指向的堆内存中的java对象是一个Cat
假设(c instanceof Cat)为true表示:
c引用指向的堆内存中的java对象不是一个Cat
*****重点:子类特有的方法才需要强制类型转换
程序员一定要养成的一个习惯:
任何时候,任何地点在对类型进行向下转型的时候都要使用instanceof运算符进行判断。这样可以很好的避免程序出错。
例:
public class Animal(){
…….
}
class Cat extends Animal () {
……..
}
class Bird extends Animal () {
……….
}
Animal a1 = new Bird();
Cat y = (Cat) a1
y.move;//编译没问题但是会出现运行错误
//cat和bird之间没有关系,他们都只是继承于父类Animal,之间强制转换会报错
正确的做法是使用instanceof运算符
if (a1 instanceof cat){//如果a1是Cat
Cat y = (Cat) a1;//则进行强制类型转换
y.move;
}