package _05_多态的弊端;

public class Test {
    /**
     * Anmail 父类 : 父类当中有一个eat()
     * 子类 Dog:  eat() 吃骨头   lookhome 看家
     * 子类cat : eat() 吃鱼      catchMouse 抓老师
     */

    public static void main(String[] args) {

        /**
         * 多态弊端:
         * 无法调用子类特有变量和方法
         */
        // 调用cat 当中抓老鼠方法
        // 父类型大类型 子类型小类型   父->子
        Anmail anmail = new Dog();
        anmail.eat();
        Anmail anmail1 = new Cat();
        anmail1.eat();
        Dog dog = (Dog) anmail;
        dog.lookhome();
        // 调用dog 当中看家方法
        Cat cat = (Cat) anmail1;
        cat.catchMouse();

        /**
         * 已经解决了 不能够去调用子类方法问题
         * 可能有新的问题: 在类型转换的时候可能出现问题
         * ClassCastException: 类在做类型转换的时候出现异常 通常情况下就是你在做强转的时候出现问题
         */
//        Dog dog1 = (Dog) anmail1;
//        dog1.lookhome();

        /**
         * 我们在做类型转换的时候难免会出现类型转换问题
         *
         * 为了避免这种问题 学习一个关键字instanceOf
         * 判断他是否是某一个类型
         * 比如  anmail instanceOf Dog  boolean   判断他是否是狗类型
         * 如果为true 就表示他是Dog 类型 如果为flase 表示不是Dog 类型
         */
        if(anmail1 instanceof Dog){
            Dog dog1 = (Dog) anmail1;
            dog1.lookhome();
        }else if(anmail1 instanceof Cat){
            Cat cat1 = (Cat) anmail1;
            cat1.catchMouse();
        }
    }


}
