多态,同一个行为具有多个不同表现形式或形态的能力。
现实中,关于多态的例子数不胜数。如按下F1键这个动作,在Word的时候按下会弹出Word帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
多态存在的三个必要条件:
1.继承
2.重写
3.父类引用指向子类对象
例:区分Teacher与Student
- 创建一个People类:
- 创建Teacher、Student类,并继承People类
- 对show方法进行重写,并将父类引用指向子类对象
如此一来,就可以很简单的区分Teacher与Student了,如果用那种基础的写法,假设有100中身份,岂不是要写100多遍的show,这样会显得太麻烦了。多态的好处有:
1. 可替换性(substitutability):多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2. 可扩充性(extensibility):多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3. 接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4. 简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。