package J20250717.demo04;

/**
 * @author WanJl
 * @version 1.0
 * @title Main
 * @description
 * @create 2025/7/17
 */
public class Main {
    public static void main(String[] args) {
        //多态
        //父类引用指向子类的对象
        //是父类的引用，名义上是父类，名义上调用的也是父类的方法。
        //是子类的对象，实际上是子类，实际上执行的也是子类的方法。
        //Animal animal1=new Dog();
        //animal1.eat();  //方法运行结果？

        //Animal animal2=new Cat();
        //animal2.eat();  //方法运行结果？
        //animal2.drink();

        //父类的引用指向子类的对象
        SuperClass sc=new SubClass();
        sc.show();
        //sc.method(); //多态的弊端，不能使用子类特有的方法

        //解决方案：向下造型
        //将sc对象从父类的类型，转换为子类的类型
        //SubClass subClass=(SubClass) sc;
        //subClass.method();//这样就可以调用子类特有的方法了
        //将父类转型为另一个子类
        //SubClass02 subClass02=(SubClass02)sc;
        //subClass02.show();
        //subClass02.subClass02Method();

        if(sc instanceof SubClass02){   //如果sc对象是SubClass02类型，就转换为SubClass02类型的对象
            SubClass02 subClass02=(SubClass02)sc;
            subClass02.show();
            subClass02.subClass02Method();
        }else if(sc instanceof SubClass){//如果sc对象是SubClass类型，就转换为SubClass类型的对象
            SubClass subClass=(SubClass) sc;
            sc.show();
            subClass.method();
        }

    }
}
