返回

TypeScript 中的接口和类:探索面向对象的编程世界

前端

面向对象编程的基石:TypeScript中的接口和类

接口:行为契约的定义

在TypeScript中,接口扮演着关键角色。它们定义了一组方法、属性和约定,指导其他类实现或遵循。接口的声明以interface开头,后接接口名称和大括号,包含方法和属性定义。

例如:

interface Vehicle {
  move(): void;
  stop(): void;
  getSpeed(): number;
}

该示例定义了一个名为Vehicle的接口,其中包含三个方法move、stop和getSpeed。这些方法没有实现细节,仅了需要实现的特定行为。它类似于一份契约,规定任何实现该接口的类都必须遵守这些规则。

接口继承:扩展契约

接口可以继承其他接口,就像类可以继承其他类一样。通过extends关键字实现接口继承,有助于创建更抽象、更可重用的接口。

interface Flyable extends Vehicle {
  takeOff(): void;
  land(): void;
}

在此示例中,我们创建了一个名为Flyable的接口,它继承自Vehicle接口。Flyable接口扩展了Vehicle接口的契约,添加了两个新方法takeOff和land。这意味着任何实现Flyable接口的类都必须实现move、stop、getSpeed、takeOff和land这五个方法。

类:构建可重用对象的蓝图

类是TypeScript中创建可重用对象的蓝图。它们使用class关键字定义,后接类名和大括号,包含属性和方法定义。

class Car implements Vehicle {
  private speed: number;

  constructor() {
    this.speed = 0;
  }

  move() {
    this.speed++;
  }

  stop() {
    this.speed = 0;
  }

  getSpeed() {
    return this.speed;
  }
}

该示例定义了一个名为Car的类,它实现了Vehicle接口。Car类包含一个私有属性speed,以及三个方法move、stop和getSpeed,它们对应于Vehicle接口中定义的方法。

实例化和使用类

要使用类,我们需要先实例化它。实例化一个类就是创建该类的对象。我们可以使用new关键字实例化一个类。

const car = new Car();

car.move();
car.move();
console.log(car.getSpeed()); // 2

在此示例中,我们实例化了一个Car对象,并调用了它的move和getSpeed方法。

总结

接口和类是TypeScript中面向对象编程的核心概念。接口定义了一组方法、属性和约定,指导其他类实现或遵循,而类则是构建可重用对象的蓝图。通过接口和类,我们可以创建可扩展、可维护和可重用的代码。

常见问题解答

  1. 接口和抽象类的区别是什么?
    接口只了类必须实现的方法和属性,而抽象类提供了方法的实际实现,子类可以扩展和覆盖这些方法。

  2. 为什么使用接口而不是类?
    接口用于定义行为契约,而类用于创建具体对象。接口更注重抽象和可重用性,而类则注重具体实现。

  3. 如何判断何时使用接口而不是类?
    如果你需要定义一组方法和属性,供其他类实现,而无需提供实际实现,那么使用接口。如果你需要创建可实例化的对象并提供实际实现,那么使用类。

  4. 接口和类型别名有什么区别?
    接口可以包含方法和属性定义,而类型别名只能包含类型定义。

  5. 什么时候应该继承接口?
    当你想扩展一个接口的契约并创建更具体的接口时,可以继承接口。