多态
多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。
如图:
多态的优点
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
多态的前提:
- 子父类继承关系;
- 方法的重写;
- 父类引用指向子类对象
public class PoymorphicDemo { public static void main(String[] args) { Animal a = new Cat(); a.eat(); } } class Animal { public void eat() { System.out.println("吃东西"); } } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } }
输出结果: 猫吃鱼
多态的成员特点:
成员变量:没有重写的概念;
成员方法:根据子类方法输出结果;
静态方法:通过类名调用方法;
public class PoymorphicDemo2 { public static void main(String[] args) { Dad d = new Kid(); d.function(); } } class Dad { public static void function() { System.out.println("我是父类静态方法"); } } class Kid extends Dad { public static void function() { System.out.println("我是子类静态方法"); } }
输出结果: 我是父类静态方法
总结:
1. 多态是方法的多态,不是属性的多态(多态与属性无关)。
2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
好处:节省代码让代码更加灵活,不论增加多少子类,都没有问题,如果没有多态就会有大量的重载。
多态的实现方式
- 接口实现多态
- 抽象类实现多态
- 虚方法实现多态