MST
星途 面试题库

面试题:TypeScript 类的继承与多态实现

假设有一个动物类 `Animal`,包含 `name` 属性和 `makeSound` 方法。现在需要创建 `Dog` 和 `Cat` 类继承自 `Animal` 类,并重写 `makeSound` 方法实现不同的叫声。请用 TypeScript 实现这个面向对象编程结构,并说明如何通过多态性来统一调用不同动物的叫声。
48.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound(): void {
        console.log('Generic animal sound');
    }
}

class Dog extends Animal {
    makeSound(): void {
        console.log('Woof!');
    }
}

class Cat extends Animal {
    makeSound(): void {
        console.log('Meow!');
    }
}

// 通过多态性统一调用不同动物的叫声
function makeAnimalSound(animal: Animal) {
    animal.makeSound();
}

const dog = new Dog('Buddy');
const cat = new Cat('Whiskers');

makeAnimalSound(dog); 
makeAnimalSound(cat); 
  1. 定义Animal
    • 包含一个name属性用于存储动物的名字。
    • 构造函数用于初始化name属性。
    • makeSound方法定义了通用的动物叫声,这里是一个简单的默认输出。
  2. 定义Dog
    • 继承自Animal类。
    • 重写makeSound方法,使其输出狗的叫声“Woof!”。
  3. 定义Cat
    • 继承自Animal类。
    • 重写makeSound方法,使其输出猫的叫声“Meow!”。
  4. 多态性调用
    • 定义makeAnimalSound函数,它接受一个Animal类型的参数。
    • 无论传入的是Dog实例还是Cat实例,函数都会调用对应的重写后的makeSound方法,这就是多态性的体现。
    • 创建DogCat的实例,并将它们传入makeAnimalSound函数,实现统一调用不同动物的叫声。