欢迎光临散文网 会员登陆 & 注册

无需看代码,通俗解释封装、继承、多态。

2022-04-24 09:37 作者:Tikubook官方频道  | 我要投稿

类的封装、继承、多态三个概念,要想说清楚,通常都需要使用代码,这样会更到位。

如果没有编程语言的基础,要明白这几个概念也是可以的,让我们根据一个实际的例子来具体说明。

在接下来的例子中会有三个类:电水壶类、保温电水壶类、电茶壶类。

假如徐老师有间公司,销售的产品是电水壶,这种电水壶有这些主要特点:

1 由壶体和壶盖组成;

2 颜色是银白色的;

3 有一个开关可以控制启动烧水;

水烧开后会发出声音提醒。

按照面向对象的设计方法,把这个电水壶称为「电水壶类」,按照类表达方式:

1 有两个成员变量:壶体和壶盖;

2 有一个成员属性:颜色,它的值等于银白色;

3 有一个成员方法:烧水;

4 有一个成员事件:水已经烧开会提醒

其中变量用来存储类中的数据,属性用来表达或修改类的特征,方法用作执行类的功能,事件用来对外发送通知,类就是记录一系列变量、属性、方法、事件成员的集合。

所有具有这些特征成员的具体产品就叫做这个类的对象,这就是面向对象的程序设计理念来由。

用前面的例子来讲,「电水壶类」是电水壶的产品设计规范,可以理解为这是电水壶的抽象,而具体的单个电水壶产品就是「电水壶类」的对象,通常叫做类的实例。

以上这些描述的就是类的封装。

假设某一天,公司想生产一种具有自动保温功能的电水壶,有两种方案:一是完全重新设计一个新的电水壶,二是在现有电水壶的基础上增加一个保温开关。

显然,第二种方式更经济,公司把这种新的电水壶称为保温电水壶,它增加了一个特点:增加了一个保温开关,按下开关后可以对已经烧开的水进行自动保温。按照前面的设计方法,由于新电水壶增加了一个成员,所以不能把它归纳到已有的「电水壶类」里面,但是我们可以建立一个新的类:「保温电水壶类」,它在「电水壶类」的基础上增加了一个新成员方法,就是保温,他提供的功能是按下开关就开始保温。

由于它基于「电水壶类」设计而来,因此我们把「电水壶类」称为「保温电水壶类」的基础类或父类,把「保温电水壶类」称为「电水壶类」的继承类或子类,它们之间是继承与被继承的关系,继承类自动具有基础类的所有特征成员。

我们可以把「保温电水壶」称为「电水壶」,但是不能把「电水壶」称为「保温电水壶」。假设客户要买100个「电水壶」,产品数量不够时我们可以用「保温电水壶」来充数,但是客户要买100个「保温电水壶」就绝对不能用「电水壶」来充数。

从程序设计的角度来讲,就是可以把一个数据类型为「保温电水壶类」的对象赋值到一个数据类型为「电水壶」的变量,但是不允许把一个数据类型为「电水壶」的对象赋值到一个数据类型为「保温电水壶类」的变量。

需要注意的是如果把一个数据类型为「保温电水壶类」的对象赋值到一个数据类型为「电水壶」的变量,那么这个变量里面实际存储的还是一个「保温电水壶类」对象,并不会因为变量的数据类型为「电水壶」存储进去的对象的数据类型就也为「电水壶」了。

以上这些描述的就是类的继承。

让我们继续假设,有一天公司发现电茶壶的销路要比电水壶好,同样有两种方案:一是完全重新设计新的电茶壶,二是修改现有电水壶的烧水功能,将其改为烧茶。

很显然,第二种方式更经济实惠。通过修改了电水壶的烧水功能,使其去烧茶。

同样,我们需要定义一个名为「电茶壶类」的类,然后定义一个同样名为「烧水」的方法,实现为烧茶,该方法覆盖了「电水壶类」中的原有名为「烧水」的方法,用来烧茶。

这样以后调用「电茶壶类」类的「烧水」方法时,就会改去烧茶,而不会去烧水。

需要注意的是:如果把一个数据类型为「电茶壶类」的对象赋值到一个数据类型为「电水壶」的变量,据前所述,这个变量里面实际存放的还是一个「电茶壶类」的对象,因此如果调用该变量的「烧水」方法,实际上调用的还是「电茶壶类」的烧茶功能。

以上这些描述的就是类的多态。


无需看代码,通俗解释封装、继承、多态。的评论 (共 条)

分享到微博请遵守国家法律