什么是多态?
多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
在现实生活中也有很多例子。以交通工具为例,交通工具按种类可以分为车、船、飞机等种类,而这些交通工具都有不同的移动方式,比如车在路上开,船在水里开,飞机在天上开灯,这就是不同交通工具在同一个行为上的多态。
多态实现的必要条件
- 继承
- 重写
- 父类引用指向子类对象
接下来用交通工具的不同的移动方法举个例子。
先定义一个交通工具类Vehicle,类中定义一个移动方法move()。
之后定义一个Car类继承交通工具Vehicle,同时重写move方法。
这里来说说个人认为为什么要继承和重写是必要条件:面向对象五大原则中有一个依赖倒置原则,即抽象不依赖与具体,具体不依赖于抽象。既然要实现多态,则必定有一个作为"抽象"类来定义“行为”,以及若干个作为"具体"类来呈现不同的行为形式或形态。
至于重写就是为了让方法有不同的表现形式,也是多态的根本。
最后是父类引用指向子类。代码示例如下:
面向对象五大基本原则中有一条里氏替换原则,简单说就是父类可以调用子类,子类不能调用父类。提个概念,编译器类型指的是‘=’左边的类型,运行期类型指的是‘=’右边的类型。当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型是父类类型,运行期类型是子类类型。
多态的实现途径
- 重写
- 重载
- 接口
多态的弊端
不能使用子类特有的成员属性和子类特有的成员方法。
若想在执行过程中使用car特有的属性方法,可以将这个父类引用再强制转换为Car类型。
多态的优点
-
消除类型之间的耦合关系
-
可替换性
-
可扩充性
-
接口性
-
灵活性
-
简化性