0. 前言
陆续讲完了抽象、封装和继承,终于到多态了,说实话这四个概念的耦合性比较高,明明每个概念都很清晰明了,但是拆分开来就确实不太好写,每篇写之前都需要构思很久。OK,本章写完面向对象的基本特征就全部结束喽,作为开胃小菜,接下来才是 Java 漫漫征程的开始。
1. 什么是多态
多态的概念并不难,并且在实际编码中可以说是最最高频使用率。多态就是使得同一个行为具有多个不同表现形式或形态的能力。举个形象点的例子:对于 “打印” 这个行为,使用彩色打印机 “打印” 出来的效果就是彩色的,而使用黑白打印机 “打印” 出来的效果就是黑白的。我们就称 “打印” 这个行为是多态的,彩色打印效果和黑白打印效果就是 “打印” 这个行为的两个不同的表现形式。
还可以这样理解,同一个行为在不同的对象上会产生不同的结果。再举个形象点的例子:比如我们按下 F1 键这个行为:如果当前在 Word 下弹出的就是 Word 帮助和支持;在 Windows 下弹出的就是 Windows 帮助和支持。
2. 多态发生的三个必要条件
先看下面这段代码,首先,我们有一个基类 Shape,三个子类,并且都重写了基类的 draw 方法:
class Shape{
void draw(){}
}
class Circle extends Shape{
void draw(){
System.out.println("Circle.draw()");
}
}
class Square extends Shape{
void draw(){
System.out.println("Square.draw()");
}
}
class Triangle extends Shape{
void draw(){
System.out.println("Triangle.draw()");
}
}