如何才知道一个父类引用的对象,本来是什么子类?
格式:
对象 instanceof 类名称
这将会得到一个Boolean值结果,也就是判断前面的对象能不能当作后面的实例
//动物类
public abstract class Animal {
public abstract void eat();
}
//猫类
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
//猫的特有方法
public void catchMouse(){
System.out.println("猫捉老鼠");
}
}
//狗
public class Dog extends Animal{
@Override
public void eat() {
}
public void watchHouse(){
System.out.println("狗看门");
}
}
public class DemoInstanceof {
public static void main(String[] args) {
Animal animal = new Dog(); //本来是一只猫
animal.eat(); //猫吃鱼
//如果希望调用子类特有方法,需要向下转型
//判断父类引用animal本来是不是Dog
if(animal instanceof Dog){
((Dog) animal).watchHouse();
}
//判断animal本来是不是Cat
if(animal instanceof Cat){
Cat cat = (Cat)animal;
cat.catchMouse();
}
givePet(new Dog());
givePet(new Cat());
}
public static void givePet(Animal animal){
if(animal instanceof Dog){
((Dog) animal).watchHouse();
}
//判断animal本来是不是Cat
if(animal instanceof Cat){
Cat cat = (Cat)animal;
cat.catchMouse();
}
}
}