MST

星途 面试题库

面试题:Python类继承与多态 - 基础应用

请定义一个基类`Animal`,具有`speak`方法,然后定义两个子类`Dog`和`Cat`继承自`Animal`,并重写`speak`方法分别输出'Woof'和'Meow'。最后创建`Dog`和`Cat`的实例,并调用`speak`方法。请说明这其中是如何体现继承与多态的。
44.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print('Woof')

class Cat(Animal):
    def speak(self):
        print('Meow')

dog = Dog()
cat = Cat()

dog.speak()
cat.speak()

继承的体现

  1. DogDog类继承自Animal类,这意味着Dog类拥有Animal类的所有属性和方法(在本例子中是speak方法,虽然Animal类的speak方法是一个占位方法)。Dog类通过class Dog(Animal)语句明确声明继承关系,这样Dog类就成为了Animal类的子类。
  2. Cat:同理,Cat类也继承自Animal类,通过class Cat(Animal)语句,Cat类也获得了Animal类的相关属性和方法。

多态的体现

  1. 方法重写DogCat类都重写了从Animal类继承来的speak方法,各自实现了不同的行为,Dog类的speak方法输出'Woof',Cat类的speak方法输出'Meow'。
  2. 动态绑定:当创建DogCat的实例dogcat,并调用它们的speak方法时,Python会根据对象的实际类型(运行时类型)来决定调用哪个speak方法。虽然dogcat都可以看作是Animal类型(因为它们继承自Animal),但在运行时,dog.speak()会调用Dog类中重写的speak方法,cat.speak()会调用Cat类中重写的speak方法。这就是多态的体现,同样的方法调用(speak方法),根据对象的不同类型,产生不同的行为。