# 继承与多态

URL: https://caijiao.org/python/ch08/inheritance
Source: docs/python/ch08/inheritance.md
Description: 本章介绍 Python 中的继承和多态特性，讲解如何通过继承复用代码以及如何实现多态提升代码的灵活性。

继承是面向对象编程中的重要特性，它允许我们通过已有的类创建新类。多态则使得不同类型的对象能够以相同的接口响应调用，从而提高代码的灵活性和可扩展性。

## 继承

继承允许一个类从另一个类获取属性和方法。通过继承，可以复用已有类的代码。

```python
class Animal:
    def speak(self):
        print("动物发出声音")

class Dog(Animal):
    def speak(self):
        print("汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵")

dog = Dog()
cat = Cat()

dog.speak()  # 输出：汪汪
cat.speak()  # 输出：喵喵
```

在上述代码中，`Dog` 和 `Cat` 都继承了 `Animal` 类，并重写了 `speak` 方法。

## 多态

多态是指不同类型的对象能够通过相同的接口调用不同的实现。通过继承和方法重写，实现了多态。

```python
def make_sound(animal):
    animal.speak()

make_sound(dog)  # 输出：汪汪
make_sound(cat)  # 输出：喵喵
```

尽管 `dog` 和 `cat` 是不同类型的对象，但它们都实现了 `speak` 方法，因此可以通过相同的 `make_sound` 函数进行调用。

## 方法重写与父类方法的调用

在子类中，我们可以重写父类的方法。如果需要在子类中调用父类的方法，可以使用 `super()`。

```python
class Bird(Animal):
    def speak(self):
        super().speak()  # 调用父类方法
        print("鸟儿唱歌")

bird = Bird()
bird.speak()  # 输出：动物发出声音\n鸟儿唱歌
```

## 总结

- 继承允许通过已有类创建新类，并复用代码；
- 多态使得不同类型的对象可以通过相同接口调用不同的实现；
- 通过方法重写，子类可以修改父类方法的行为，并且可以通过 `super()` 调用父类方法。
