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()两种方式不要混用
开发中如果使用当前子类名的调用方法,会形成递归调用,出现死循环
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!