允许不同类的对象对同一消息做出不同反应

编译时多态——方法重载

运行时多态——程序运行时动态决定调用哪个方法

这里的多态指运行时多态

必要条件:满足继承关系 父类引用指向子类对象

1.向上转型、隐式转型、自动转型

父类引用指向子类实例 小类型转为大类型

可以调用子类重写父类的方法以及父类派生的方法 无法调用子类独有的方法

//向上转型
        Animal two = new Cat();
        Animal three = new Dog();

        two.eat();
        three.eat();
        //这里不能调用子类独有的方法,如three.sleep();

2.向下转型、强制类型转换

子类引用指向父类对象,此处必须进行强转,可以调用子类特有的方法

public void feed(Animal animal){
        if(animal instanceof Cat){
            Cat temp = (Cat)animal;
            temp.eat();

        }else if(animal instanceof Dog){
            Dog temp = (Dog)animal;
            temp.eat();

        }
    }

注:父类中的静态方法子类不能重写,所以向上转型之后,只能调用到父类原有的静态方法