1、什么是多态:同一个对象,在不同时刻表现出来的不同形态。

举例:狗

可以说狗是狗:        狗 Dog = new 狗();

也可以说狗是动物:动物 Animal = new 狗();

这里狗在不同时刻表现出来不同的形态,这就是多态。

2、多态的前提和体现

 a、有继承/实现关系;

 b、有方法重写;

 c、有父类的引用,指向子类的对象;

3、多态中成员变量和成员方法访问特点

 a、成员变量:编译看左边(父类),运行看左边(父类)

 b、成员方法:编译看左边(父类),运行看右边(子类)

为什么成员方法和成员变量访问特点不一样:因为成员方法有重写覆盖的概念,而成员变量没有重写。

4、多态的好处和弊端

 a、好处:提高了程序的扩展性,具体体现为:定义方法的时候,使用父类型作为形式参数,该方法就可以接收父类的任意子类对象,并调用子类方法

 b、弊端:不能使用子类的特有功能

 

public class DuoTaiTest {

    public static void main(String[] args) {
        Animal a = new Dog();
        a.eat(); // 调用的是dog类的方法
        System.out.println(a.num);// 输出的是10

        useAnimal(new Dog());
        useAnimal(new cat());
    }

    public static void useAnimal(Animal a) {
        a.eat();
        // a.watchHome(); 编译报错
    }

}

// 动物类
class Animal {

    int num = 10;

    public void eat() {
        System.out.println("动物吃饭");
    }
}

// 狗类
class Dog extends Animal {

    int num = 20;

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    public void watchHome() {
        System.out.println("看家");
    }
}

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

}