继承的意义
继承是面向对象技术的重要内容,有了继承,使软件的重用成为可能。
过去,软件人员开发新的软件,能从已有的软件中直接选用完全符合要求的部件不多,一般都要进行许多修改才能使用,实际上有相当部分要重新编写,工作量很大。缩短软件开发过程的关键是鼓励软件重用。继承机制解决了这个问題。编写面向对象的程序时要把注意力放在实现对自己有用的类上面,对已有的类加以整理和分类,进行剪裁和修改,在此基础上集中精力编写派生类新增加的部分,使这些类能够被程序设计的许多领域使用。
由于继承的机制,这就吸引了许多人开发各类实用的类库。用户将它们作为基类去建立适合于自己的类(即派生类),并在此基础上设计自己的应用程序。类库的出现使得软件的重用更加方便
人们为什么这么看重继承,要求在软件开发中使用继承机制,尽可能地通过继承建立一批新的类?为什么不是将已有的类加以修改,使之满足自己应用的要求呢?
归纳起来,有以下几个原因:
有许多基类是被程序的其他部分或其他程序使用的,这些程序要求保留原有的 基类不受破坏。使用继承是建立新的数据类型,它继承了基类的所有特征,但不改变基类本身。基类的名称、构成和访问属性丝毫没有改变,不会影响其他程序的使用。。
许多基类是专门作为基类设计的。有些基类可能并没有什么独立的功能,只是一个框架,或者说是抽象类。人们根据需要设计了一批能适用于不同用途的通用类,目的是建立通用的数据结构,以便在此基础上添加各种功能,从而建立各种功能的派生类。
在面向对象程序设计中,需要设计类的层次结构,从最初的抽象类出发,每一层派生类的建立都逐步地向着目标的具体实现前进,换句话说,是不断地从抽象到具体的过程。每一层的派生和继承都需要站在整个系统的角度统一规划,精心组织。
Python中继承的过程
继承的语法:
class类型(被继承的类型):
pass
继承中出现的术语:
父类:被继承的类,也称为基类、超类
子类:当前类,也称为派生类
子类继承父类,体现的时A is a B的关系
子类继承父类,就可以使用父类中所有的公开的属性和方法
继承链:
A继承B,B继承C,C继承D
A直接继承了B,间接继承了C,D;此时A创建的对象,可以同时使用B,C,D中所有公开的属性和方法
多继承:
python中,一个类型,可以同时继承多个类型,同时拥有所有继承类型的所有公开的属性和方法
备注:在进行代码设计的过程中,可能会出现多继承,所以尽量不要在父类中定义相同名称的属性或者方法
备注2:如果父类中出现了相同名称的属性和方法,在使用的时候子类调用时会优先继承优先调用。
方法重写:
子类在自己类中重新定义父类中已经存在的方法,在执行该方法时,如果子类中没有重写就直接调用父类的方法,如果子类重写了该方法,就直接调用子类重写的方法!
扩展:子类中,访问父类的属性和方法:
classUser(Person):
def__init__(self, name, age):
#直接通过父类的类名称调用父类的属性和方法
Person.__init__(name, age)
#通过super()来调用父类的属性和方法
super().__init__(name, age)