TypeScript:Abstract Class抽象类

介绍

TypeScript 中支持抽象类(Abstract Class),它是一种不能直接实例化的类,主要用于定义其他类的共同接口和基础行为,同时强制子类实现特定方法。

特点

  1. 用 abstract 关键字声明
  2. 可以包含抽象方法(无实现体)和具体方法(有实现)
  3. 不能直接实例化,只能被继承
  4. 子类必须实现抽象类中所有的抽象方法,否则子类也需声明为抽象类

抽象类与接口的区别

  • 抽象类可以包含具体方法实现,接口只能定义方法签名
  • 类只能继承一个抽象类,但可以实现多个接口
  • 抽象类更适合表示”是一个”的关系(继承),接口更适合表示”有能力”的关系(实现)

用法

基本用法

// 定义抽象类
abstract class Animal {
  // 抽象方法(必须由子类实现)
  abstract makeSound(): void;

  // 具体方法(提供默认实现)
  move(): void {
    console.log("动物在移动");
  }
}

// 继承抽象类并实现抽象方法
class Dog extends Animal {
  // 必须实现抽象方法
  makeSound(): void {
    console.log("汪汪叫");
  }

  // 可以重写父类的具体方法
  move(): void {
    console.log("狗在跑");
  }
}

// 实例化子类
const dog = new Dog();
dog.makeSound(); // 输出: "汪汪叫"
dog.move();      // 输出: "狗在跑"

// 错误:不能实例化抽象类
// const animal = new Animal(); // 编译错误

带属性的抽象类示例

abstract class Vehicle {
  protected brand: string;

  constructor(brand: string) {
    this.brand = brand;
  }

  abstract start(): void;

  getBrand(): string {
    return this.brand;
  }
}

class Car extends Vehicle {
  start(): void {
    console.log(`${this.brand}汽车启动了`);
  }
}

const myCar = new Car("特斯拉");
myCar.start();       // 输出: "特斯拉汽车启动了"
console.log(myCar.getBrand()); // 输出: "特斯拉"

抽象类在 TypeScript 中常用于定义类层次结构的基础,提供代码复用的同时,确保子类遵循特定的接口规范。


原文出处:/show_1GW20bARcPRy.html