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("猫吃鱼"); } }