Loading

3.单继承和方法的重写

面向对象三大特性
  封装:根据职责将属性和方法封装到一个抽象的类中
  继承:实现代码的重用,相同代码不需要重复的编写
    1.单继承
    2.多继承
  多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
 
单继承
  继承的概念、语法和特点
  继承的概念:子类拥有父类所有的方法和属性
 
当不同的类里面,有需要使用的同样的方法时,就可以使用继承
如下有动物类和虎类,吃、喝、睡三个方法都是一样的,虎类比动物类多了一个睡的方法
虎类和动物类有三个同样的方法,吃、喝、跑
可以用虎类继承动物类,被继承类是父类,继承类是子类,子类会拥有父类的所有方法
语法:
 
用虎类继承动物类,虎类里面不需要重复写相同的 吃、喝、跑方法,创建虎对象之后就可以直接使用动物类里的方法
子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
子类中应该根据职责,封装子类特有的属性和方法
 
继承和派生
  Tiger类是Animal的子类,Animal类是Tiger类的父类,Tiger类从Animal类继承
  专业术语:
  Tiger类是Animal的派生类,Animal类是Tiger类的基类,Tiger类从Animal类派生
 
继承的传递性
子类会拥有父类的所有属性,也会拥有父类的父类的所有属性,
再创建一个猫类,猫类继承虎类,虎类继承动物类,猫类也可以直接调用动物类的所有属性
 
方法的重写
  当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)
  重写父类有两种情况
    1.覆盖父类的方法
    2.对父类方法进行扩展
实现方式:
  在子类中定义一个和父类里同名的方法并且实现
  运行时,只会调用子类中重写的方法,而不会再调用父类中封装的方法
在虎类中重写了drink方法,用虎对象调用drinl方法时就会调用虎类中的drink,而不会再使用动物类中的drink
用动物类调用drink,使用的是依旧动物类中drink方法,子类重写父类方法,父类调用方法不受影响
 
方法的扩展
  在开发中,子类方法的实现中包含父类的方法实现(父类原本的方法实现,是子类方法的一部分),就可以使用扩展的方法
 
实现方式:
  1.在子类中重写父类方法
  2.在需要的位置使用super().父类方法来调用父类方法的执行
  3.代码其他位置针对子类的需求,编写子类特有的代码实现
 
关于super
  在python中super是一个特殊的类
  super()就是使用super类创建出来的对象
  最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现
在虎类里面重写动物类的drink,针对子类特有的需求编写代码,使用super().drink创建父类的drink对象
之后调用的时候,原有方法内容和扩展内容都会使用
 
调用父类方法的另外一种方式
  super()方式 只可以在python3.x中使用,2.x不支持
  在python 2.x中,可以使用 父类名.方法(self) 来实现调用(此方法也支持3.x)
  在开发中,父类名和super()两种方式不要混用
  开发中如果使用当前子类名的调用方法,会形成递归调用,出现死循环
 

posted @ 2021-02-20 14:29  木子七  阅读(65)  评论(0编辑  收藏  举报