多态¶
一、什么是多态¶
父类引用指向子类对象,调用方法时实际执行子类重写的版本。
二、三个条件¶
- 继承。
- 重写。
- 父类引用指向子类对象。
三、实现机制¶
静态分派(重载)¶
编译期确定:
看引用类型,编译期决定。
动态分派(重写)¶
运行期确定:
invokevirtual 指令查虚方法表。
四、好处¶
- 可扩展。
- 代码复用。
- 面向接口编程。
五、例子¶
interface Shape { void draw(); }
class Circle implements Shape { ... }
class Rect implements Shape { ... }
void drawShape(Shape s) { s.draw(); }
drawShape 不关心具体类型。
一句话
多态 = 同一方法,不同表现。