简介
同一方法作用于不同类的实例,将产生不同的执行结果。即"一个对外接口的方法有多种表现形式"。
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
Java中,父类的引用既可以指向父类的对象,也可以指向子类的对象,但子类的引用不能指向父类的对象。
必要条件
- 要有继承(或实现接口)
- 要有重写
- 父类引用指向子类对象:Parent p = new Child();
多态优点
- 可扩充性
- 接口性
- 简洁灵活
实现方式
- 继承父类,重写父类方法
- 实现接口,重写接口方法
案例
父类Shape:
1 | public class Shape { |
子类Circle:
1 | public class Circle extends Shape { |
子类Square:
1 | public class Square extends Shape { |
测试类Test:
1 | public class Test { |
运行结果:
Circle.draw()
注意,用子类引用指向父类对象会报错,父类引用调用子类特有的方法会报错,如下所示:
1 | Circle c = new Shape(); // IDEA检测报错 |
1 | Shape s = new Circle(); // 父类引用指向子类对象 |
如有错误,欢迎指正!