持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
1. 方法的重写
继承的概念:
- 子类拥有父类的所有方法和属性
- 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发 应用场景:当父类的方法实现不能满足子类需求时,可以对方法进行重写-重新编写(override)。
重写父类方法有两种情况:
- 覆盖父类的方法
- 对父类方法进行扩展
覆盖父类的方法:
- 如果在开发中,父类的方法实现和子类的方法实现,完全不同
- 就可以使用覆盖的方式,在子类中重新编写父类的方法实现
具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现。重写之后,在运行时,只会调用子类中重写的方法,而不会调用父类封装的方法。
2. 示例演示
在XiaoTianQuan类中创建新的bark方法,再使用XiaoTianQuan创建对象,调用bark方法。看看在XiaoTianQuan的父类Dog中的bark方法还会不会实现呢?
代码演示如下所示:
class Animal:
def eat(self):
print("吃...")
def drink(self):
print("喝...")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoTianQuan(Dog):
def fly(self):
print("我会飞")
def bark(self):
print("叫得跟神一样")
xtq = XiaoTianQuan()
# 如果子类中重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()
运行结果如下图所示:由运行结果可以看出,在运行时,子类对象只会调用子类中重写的方法,而不再会调用原本在父类中封装的方法。
3. 对父类方法进行扩展
如果在开发中,子类的方法实现中包含父类的方法实现
- 父类原本封装的方法实现是子类方法的一部分 就可以使用扩展的方式
- 在子类中重写父类的方法
- 在需要的位置使用
super().父类方法来调用父类方法的执行 - 代码其他的位置针对子类的需求,编写子类特有的代码实现
4. 代码示例
代码示例如下所示:在子类中重写父类的方法,在需要的位置使用super().调用原本在父类中封装的方法。针对子类特有的需求编写特有的代码。
class Animal:
def eat(self):
print("吃...")
def drink(self):
print("喝...")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class XiaoTianQuan(Dog):
def bark(self):
# 1. 针对子类特有的需求,编写代码
print("叫得跟神一样")
# 2. 使用super().调用原本在父类中封装的方法
super().bark()
# 3. 增加其他子类的代码
print("$$!#!$!!!$$!$!&&&111")
xtq = XiaoTianQuan()
xtq.bark()
程序运行结果如下图所示: