package interfaceA.用instanceof关键字进行类型判断;
/*
如何才能知道一个父类的引用对象本来的子类
格式:
对象 instanceof 类名称
他的返回值是一个boolean类型
大部分用于判断if(对象 instanceof 类型)
向下转型一定要使用instanceof 判断
* */
public class demo_instanceof {
public static void main(String[] args) {
Animal animal = new Cat();//本来是一只猫
// 想调用只能调用共有的方法
animal.eat();
// 如果希望调用特有方法需要向下转型
// 其实就是判断animal原来是什么,然后调用子类特有方法
if (animal instanceof Dog) {
Dog dog = (Dog) animal;//向下转型
dog.lookHome();
}
if (animal instanceof Cat) {
Cat cat = (Cat) animal;//向下转型
cat.catchMouse();
}
giveMeAnAnimal(new Cat());
giveMeAnAnimal(new Dog());
}
private static void giveMeAnAnimal(Animal animal) {
if (animal instanceof Dog) {
Dog dog = (Dog) animal;//向下转型
dog.lookHome();
}
if (animal instanceof Cat) {
Cat cat = (Cat) animal;//向下转型
cat.catchMouse();
}
}
//
}
package interfaceA.用instanceof关键字进行类型判断;
public abstract class Animal {
public abstract void eat();
}
package interfaceA.用instanceof关键字进行类型判断;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("Just for fun !");
}
}
package interfaceA.用instanceof关键字进行类型判断;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("吃肉");
}
public void lookHome(){
System.out.println("二哈看家");
}
}