多态
(一)什么是多态?
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
简单的说:用基类的引用来指向子类对象。
(二)为什么要用多态?
封装可以将抽象性函式接口包装、隐藏起来,继承可以扩展已存在的代码模块;目的都是为了——代码重用。多态除了代码复用性外,还可以解决项目中紧耦合的关系,提高程序的可拓展性。耦合度讲的是模块与模块之间,代码和代码间的关联度,通过对系统的分析把他分解成一个一个的子模块,子模块提供稳定的接口,达到降低系统耦合度的目的,模块和模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。
什么是耦合?:
参考:https://blog.csdn.net/qq_24499615/article/details/77821896
1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
(三)多态的优点
- 消除类型之间的耦合关系
- 可替换性 多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
- 可扩充性 多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
- 接口性 多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
- 灵活性 它在应用中体现了灵活多样的操作,提高了使用效率。
- 简化性 多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
(四) 多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象 :父类引用指向子类对象详解
例:Animal A = new Dog();
父类引用指向子类对象时,只能调用子类中重写父类的方法和父类中原先有的没有被重写的方法。 - 另:(子类抛出异常不能比父类大)
(五) 多态的实现方法
方式一:重写
方式二:接口
方式三:抽象类和抽象方法 转到: 菜鸟教程:Java抽象类
(六) 经典实例
最初被绕晕的实例
在继承链中对象方法的调用存在一个优先级:
this.show(O)、
super.show(O)、
this.show((super)O)、
super.show((super)O)。
即先查this对象的父类,没有就重头再查参数的父类