java面向对象 向上转型和向下转型

多态:Animal animal = new Dog();
左父右子
向上转型:多态
向下转型:多态回归
java面向对象 向上转型和向下转型_第1张图片
如何才能知道一个父类引用的对象,本来是什么子类?

格式:对象 instanceof 类名称
返回值:boolean,判断前面的对象能不能当作后面类型的实例

/*Demo.java*/
public class Demo {
    public static void main(String[] args) {
        Animal animal = new Dog(); // 本来是一只狗
        animal.eat(); // 狗吃SHIT

        // 如果希望掉用子类特有方法,需要向下转型
        // 判断一下父类引用animal本来是不是Dog
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        // 判断一下animal本来是不是Cat
        if (animal instanceof Cat) {
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }

        giveMeAPet(new Dog());
    }

    public static void giveMeAPet(Animal animal) {
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        if (animal instanceof Cat) {
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
    }
}

/*Cat.java*/
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

/*Dog.java*/
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
    public void watchHouse() {
        System.out.println("狗看家");
    }
}

/*Animal.java*/
public abstract class Animal {
    public abstract void eat();
}

参考连接:https://www.bilibili.com/video/BV1uJ411k7wy
p190-192

你可能感兴趣的:(java)