Skip to content

继承

继承是面向对象编程(OOP)的核心特性之一。在 TypeScript 中,我们使用 extends 关键字来实现类之间的继承。

单继承

与 JavaScript 一样,TypeScript 中的类继承具有单根性(Single Inheritance),即一个子类只能有一个直接父类。

基本语法

typescript
class Father {
  constructor(public name: string) {}

  info(): void {
    console.log(`Father Name: ${this.name}`);
  }
}

class Child extends Father {
  constructor(
    name: string,
    public age: number,
  ) {
    // 1. 必须调用 super() 传递参数给父类构造函数
    super(name);
  }

  // 2. 使用 override 明确表示重写父类方法
  override info(): void {
    console.log(`Child Name: ${this.name}, Age: ${this.age}`);
    // 3. 通过 super.xxx() 调用父类方法
    super.info();
  }
}

const c = new Child('小明', 18);
c.info();

核心关键字

1. extends

用于声明继承关系。子类会自动获得父类中所有非私有(publicprotected)的属性和方法。

2. super

super 关键字有两种主要用法:

  • 作为函数调用 (super())
    • 必须在子类的 constructor 中首先调用。
    • 用于初始化父类。如果子类定义了构造函数,则必须显式调用 super(),否则 TS 会报错。
  • 作为对象引用 (super.method())
    • 用于在子类方法中访问父类的公开或受保护的方法
    • 注意

      super 只能用于访问父类的方法,不能用于访问父类的实例属性。

3. override

这是 TypeScript 4.3 引入的关键字,用于显式标注方法重写:

  • 意图明确:让代码阅读者一眼看出该方法覆盖了父类同名方法。
  • 安全性检查:如果父类中不存在该方法,TS 会报错,防止因拼写错误而未能正确重写的 Bug。

配置提示

如果你希望强制要求重写方法必须添加 override 关键字,可以在 tsconfig.json 中开启: "noImplicitOverride": true