MENU

Java-27 多态性

September 19, 2023 • Read: 73 • Java阅读设置

面向对象编程

Polymorphism多态性

1 什么是多态性

多态性本质上是指一个对象同时属于多种类型。
按照多态性这个名称来描述,是一个对象具有多种形态的性质。

2 为什么有多态性

一个类通常具有多个父类,也就是说,一个对象通常属于多种类型,而这就是多态性
因此,简单地说,多态性是指,子类实例化的对象可以用其父类的类型变量来接收,即SuperClass object = new SubClass()

3 有关多态性的注意点

1) 对一个对象属于一个类的定义是,该对象具有该类的所有特征。因此,给定一个对象object,满足SuperClass object = new SubClass(),该子类实例化的对象被父类类型接收,意味着该对象被定义为其父类类型,这时object虽然由子类实例化,但只有父类的所有成员,这些成员中的方法是子类的。也就是说,该对象具有实例化它的子类的所有与父类相同的方法,同时具有其被定义的父类的所有成员。简单地说,该对象所具备的成员只是其被定义为的父类所具备的成员,但是对于成员中的子类中重写的方法用的是实例化它的子类的重写的方法,属性用的是其父类的而不是实例化它的子类的。
2) 多态性针对的是方法,使用object属性时,使用并只能使用的是其当前定义的类型,即SuperClass中的属性。
3) 如果object使用了一个父类中被子类重写的方法,且子类中重写的该方法中使用了与父类同名的属性,这时该方法使用的属性实际上是子类的属性。因为,根据多态性使用子类重写的方法,子类重写的方法属于子类,其中包含的属性,自己有就用自己的,因此用的也是子类的属性。

4 多态性带来的优点

多态性主要目的就是实现代码(方法)的通用性。

想要针对一个父类的多个子类的共同都有的方法进行使用,也就是说该方法是父类、子类共有的,但不同子类或许有重写的。
如果没有多态性,相同的操作针对不同子类,各单独需要一套代码。
有了多态性,相同操作针对不同子类,只需封装一个方法,并设置接收它们父类类型的参数,这就只需一套代码,而适用多个子类。

多态性的另一个重要性体现在:抽象类、接口的使用。因为抽象类和接口不能实例化。后续学习后再补充。

5 多态性的使用

1) 针对继承性;
2) 往往子类重写父类的方法,否则,完全可以直接实例化父类对象,没必要利用多态性。

6 示例

2023-09-19T13:26:34.png
2023-09-19T13:26:44.png

Last Modified: October 2, 2023