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(); } } }