继承(Inheritance)与多态(Polymorphism)
🧩 继承和多态解决了什么问题?
在软件开发中,随着程序规模和复杂度的增长,代码的复用、扩展性和维护变得非常重要。
- 继承解决了代码复用和层次组织问题。通过继承,子类可以复用父类已有的属性和方法,避免重复代码,同时自然地表现“是一个”的关系,比如“狗是一个动物”。
- 多态解决了不同对象以统一接口表现不同行为的问题。程序可以通过基类接口调用不同子类的同名方法,灵活地处理多种对象,增强了程序的扩展性和灵活性。
这两个特性是面向对象编程的核心,使代码更简洁、易维护且功能强大。
1. 继承(Inheritance)
🧩 什么是继承?
继承是面向对象编程中的一个重要概念。一个类(子类)可以继承另一个类(父类)的属性和方法,从而复用代码并实现层次结构。
继承解决了什么问题?
- 代码复用:子类自动拥有父类的功能,不用重新编写。
- 逻辑组织:表示“是一个”的关系,如“狗是一个动物”。
- 便于扩展和维护。
🛠 继承的基本语法
类 动物:
定 初始化(self, 名字):
self.名字 = 名字
定 叫声(self):
打印("动物发出声音")
类 狗(动物): # 继承动物类
定 叫声(self): # 重写方法
打印(f"{self.名字} 叫:汪汪汪")
狗1 = 狗("旺财")
狗1.叫声() # 输出:旺财 叫:汪汪汪
📝 继承的特点
- 子类自动拥有父类的所有公有属性和方法。
- 可以重写(覆盖)父类的方法,实现不同表现。
- 可以调用父类的方法,使用
父类名.方法名(self, ...)。
👨👩👧 调用父类方法示例
类 动物:
定 __初始化__(self, 名字):
self.名字 = 名字
定 叫声(self):
打印("动物发出声音")
类 猫(动物):
定 叫声(self):
父类.叫声()
打印(f"{self.名字} 叫:喵喵喵")
猫1 = 猫("咪咪")
猫1.叫声()
2. 多态(Polymorphism)
🧩 什么是多态?
多态指的是不同类的对象对同一消息(方法调用)作出不同响应的能力。
换句话说,就是同一个接口,调用不同子类时表现不同。
多态提高了程序的灵活性和扩展性。
🛠 多态示例
类 动物:
定 叫声(self):
打印("动物发出声音")
类 狗(动物):
定 叫声(self):
打印("汪汪汪")
类 猫(动物):
定 叫声(self):
打印("喵喵喵")
定 让动物叫(动物列表):
循环 动物 在 动物列表 中:
动物.叫声()
动物们 = [狗(), 猫()]
让动物叫(动物们) # 输出:汪汪汪\n喵喵喵
📝 多态的好处
- 让程序在不修改调用代码的情况下,可以支持新的类。
- 通过基类接口调用,代码更简洁、灵活。
总结
| 概念 | 作用 | 举例 |
|---|---|---|
| 继承 | 子类复用父类代码,建立层次关系 | class 狗(动物): ... |
| 多态 | 不同子类对同一方法表现不同 | 让动物叫([狗(), 猫()]) |
继承和多态是面向对象的核心特性,掌握它们能让你的代码更易扩展、复用和维护。
需要我帮你继续生成后续章节或者添加练习题吗?