instanceof语法
object instanceof class
左边为对象,右边为类
当对象是左边类创建的对象,或者其子类创建的对象是,返回true,否则返回false
当右边类为接口时,如果左边对象实现了接口,则返回true,否则返回false
instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
instanceof用法
1.左边的对象不能是基本数据类型
2.null用instanceof与任何类型比较时都为false
什么时候需要用到instanceof—类型转换
1.什么时候需要用到强制类型转换(引用数据类型)
当把子类对象赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法,不能调用子类特有的方法,即使它实际引用的是子类对象。
如果需要让这个父类引用变量调用它子类的特有的方法,就必须把它强制转换成子类类型。
2.引用类型之间要强制转换成功需要有什么条件
把父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,否则将在运行时引发ClassCastException。
3.让程序更健壮的写法:在强制转换前使用instanceof运算符判断是否可以成功转换。
if(animals[i] instanceof Dog){
((Dog) animals[i]).lookHome();
}
if(animals[i] instanceof Chick){
((Chick) animals[i]).layEggs();
}
if(animals[i] instanceof Fish){
((Fish) animals[i]).swim();
}
if(animals[i] instanceof Swim){ //适用于所有实现Swim接口的(会游泳的)
((Swim) animals[i]).swim();
}