MST
星途 面试题库

面试题:TypeScript 类的多重继承模拟与接口应用

TypeScript 不支持多重继承,但可以通过接口和类的组合来模拟类似功能。假设现在有两个接口 `Flyable` 和 `Swimmable`,分别定义了 `fly` 和 `swim` 方法。设计一个类 `Duck`,使其既能实现飞行又能实现游泳功能,并且需要在构造函数中初始化一些与飞行和游泳相关的属性,最后创建 `Duck` 类实例并调用 `fly` 和 `swim` 方法,写出完整代码及解释。
23.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义Flyable接口,包含fly方法
interface Flyable {
    fly(): void;
}

// 定义Swimmable接口,包含swim方法
interface Swimmable {
    swim(): void;
}

// 定义Duck类,实现Flyable和Swimmable接口
class Duck implements Flyable, Swimmable {
    // 与飞行相关的属性
    private flightAltitude: number;
    // 与游泳相关的属性
    private swimDepth: number;

    // 构造函数,初始化属性
    constructor(flightAltitude: number, swimDepth: number) {
        this.flightAltitude = flightAltitude;
        this.swimDepth = swimDepth;
    }

    // 实现fly方法
    fly(): void {
        console.log(`鸭子飞行,高度为 ${this.flightAltitude} 米`);
    }

    // 实现swim方法
    swim(): void {
        console.log(`鸭子游泳,深度为 ${this.swimDepth} 米`);
    }
}

// 创建Duck类实例
const myDuck = new Duck(10, 2);
// 调用fly方法
myDuck.fly();
// 调用swim方法
myDuck.swim();

解释:

  1. 首先定义了 FlyableSwimmable 两个接口,分别规定了 flyswim 方法。
  2. 然后创建 Duck 类,通过 implements 关键字实现这两个接口,确保 Duck 类必须包含这两个接口中定义的方法。
  3. Duck 类中定义了与飞行高度 flightAltitude 和游泳深度 swimDepth 相关的私有属性,并在构造函数中初始化这些属性。
  4. 实现 flyswim 方法,在方法中输出相应的信息,展示鸭子的飞行和游泳行为。
  5. 最后创建 Duck 类的实例 myDuck,并调用 flyswim 方法,展示鸭子的两种行为。