1
 软件工程
1.8.2.3 6.2.3 继承

6.2.3 继承

继承是面向对象描述类之间相似性的重要机制,体现了类的层次关系。继承是在现存类定义的基础上定义新类的技术,现存类称为父类(一般类、基类),新类称为子类(特殊类、派生类)。面向对象软件技术中许多突出的优点和强有力的功能都来源于把类组成一个层次结构的系统(类等级)。一个类的上层可以有父类,下层可以有子类,这种层次结构系统的一个重要性质是继承性,一个子类直接继承其父类的全部描述。图6-1描述了实现继承机制的原理。

图6-1中以X、Y两个类为例,其中Y类是从X类派生出来的子类,它除了继承父类的特性外,还可以具有自己定义的特性。当创建X类的实例xl时,xl以X类为样板建立实例变量(在内存中分配所需空间),但是它并不从X类中复制所定义的方法。当创建Y类的实例yl时,既要以Y为样板建立实例变量,又要以X类为样板建立实例变量,yl所能执行的操作既有Y类中定义的方法,又有X类中定义的方法,这就是继承。当然,如果Y类中又定义了和X类中同名的数据或操作,则yl仅使用Y类中定义的这个数据或操作;除非采用特别措施,否则X类中与之同名的数据或操作在yl中就不能使用。

img68

图6-1 继承机制的原理

继承具有传递性,如果Z类继承Y类,Y类继承X类,则Z类继承X类。因此,一个子类实际上继承了在它上层的全部基类的所有描述,也就是说,属于某类的对象除了具有该类所描述的性质外,还具有类等级中该类上层全部基类描述的一切性质。当一个类只允许有一个父类时,也就是说,当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。多重继承的类可以组合多个父类的性质构成所需的性质,因此功能更强,但是使用多重继承的类时要注意避免二义性。

继承性使得相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息。使用从原有类派生出新的子类的办法,使得对软件的修改变得比过去容易得多。当需要扩充原有的功能时,派生类的方法可以调用基类的方法,并在此基础上添加必要的程序代码;当需要完全改变原有操作的算法时,可以在派生类中实现一个与基类方法同名而算法不同的方法;当需要增加新的功能时,可以在派生类中实现一个新的方法。有了继承性,还可以用把已有的一般性的解加具体化的办法,来达到软件重用的目的。