多态描述的是同名方法可以根据发送消息的对象传送参数的不同,采取不同的行为方式的特性。
面向对象系统中采用多态,大大提高了程序的抽象程度和简洁性,更重要的是,它最大限度地降低了类和程序模块之间的耦合性,提高了类模块的封闭性,使得它们不需了解对方的具体细节,就可以很好地共同工作。
这一点对程序的设计、开发和维护都有很大的好处。
1 多态的概念
多态是指一个程序中同名的不同方法共存的情况。
这些方法同名的原因是它们的最终功能和目的都相同,但是由于在完成同一功能时,可能遇到不同的具体情况,所以需要定义含不同的具体内容的方法,来代表多种具体实现形式。
Java 提供两种多态机制:重载与覆盖。
2 方法重载
在同一类中定义了多个同名而不同内容的成员方法时,我们称这些方法是重载(Override)的方法。
重载的方法主要通过形式参数列表中参数的个数、参数的数据类型和参数的顺序等方面的不同来区分的。
在编译期间,Java 编译器检查每个方法所用的参数数目和类型,然后调用正确的方法。
3 覆盖
由于面向对象系统中的继承机制,子类可以继承父类的方法。
但是,子类的某些特征可能与从父类中继承来的特征有所不同,为了
体现子类的这种个性,Java 允许子类对父类的同名方法重新进行定义,即在子类中定义与父类中已定义的相同名而内容不容的方法。
这种多态被称为覆盖(Overload)。
由于覆盖的同名方法是存在于子类对父类的关系中,所以只需在方法引用时指明引用的是父类的方法还是子类的方法,就可以很容易地把它们区分开来。