对象的向上/向下转型

在这里插入图片描述

public abstract class Animal {

    public abstract void eat();
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("够吃骨头!");
    }

    public void watchHouse(){
        System.out.println("狗看家!");
    }
}

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠!");
    }
}

/*
向上转型一定是安全的,没有问题的,正确的,但是也有一个弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。

解决方案:用对象的向下转型【还原】。
 */
public class Demo01Main {

    public static void main(String[] args) {
        //对象的向上转型,就是:父类引用指向子类对象
        Animal animal = new Cat();
        animal.eat();

        //animal.catchMouse();一旦向上转型为父类,那么就无法调用子类原本特有的内容
        //向下转型,进行“还原”动作
        Cat cat = (Cat) animal;
        cat.catchMouse();//猫抓老鼠!

        //下面是错误的向下转型
        //本来new的对象是一只猫,现在非要当做狗,错误写法,编译不会报错,但是运行会出现异常:
        //java.lang.ClassCaseException,类转换异常
        //Dog dog = (Dog) animal;//java.lang.ClassCastException:
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43751200/article/details/107467311