Typescript: Sobrecarga de Métodos

TypeScript: Method Overriding

Introduction Subclasses can replace the implementation of inherited methods using override.

简介 子类可以使用 override 关键字来替换继承方法的实现。


Without override

class TransmissorBase {
  logar(msg: string): void {
    console.log(msg);
  }
}

class TransmissorReinf extends TransmissorBase {
  logar(msg: string): void {
    // Overrides, but TypeScript does not verify it
    console.log(`[REINF] ${msg}`);
  }
}

不使用 override

class TransmissorBase {
  logar(msg: string): void {
    console.log(msg);
  }
}

class TransmissorReinf extends TransmissorBase {
  logar(msg: string): void {
    // 虽然重写了,但 TypeScript 不会进行校验
    console.log(`[REINF] ${msg}`);
  }
}

With override — recommended

class TransmissorReinf extends TransmissorBase {
  override logar(msg: string): void {
    console.log(`[REINF] ${msg}`);
  }
}

使用 override — 推荐做法

class TransmissorReinf extends TransmissorBase {
  override logar(msg: string): void {
    console.log(`[REINF] ${msg}`);
  }
}

Explicit override Explicit override makes TypeScript verify that the method actually exists in the parent class — if you misspell the name, it warns you:

class TransmissorReinf extends TransmissorBase {
  override lagar(msg: string): void { 
    // ❌ Error — "lagar" does not exist in the base class
    console.log(`[REINF] ${msg}`);
  }
}

显式 override 显式使用 override 可以让 TypeScript 校验该方法是否确实存在于父类中——如果你拼错了名称,它会发出警告:

class TransmissorReinf extends TransmissorBase {
  override lagar(msg: string): void { 
    // ❌ 错误 — "lagar" 在基类中不存在
    console.log(`[REINF] ${msg}`);
  }
}

Calling the parent class method with super

class TransmissorBase {
  protected logar(msg: string): void {
    console.log(`[BASE] ${msg}`);
  }
}

class TransmissorReinf extends TransmissorBase {
  override logar(msg: string): void {
    super.logar(msg); // Calls the parent first
    console.log(`[REINF] ${msg}`); // Then adds behavior
  }
}

使用 super 调用父类方法

class TransmissorBase {
  protected logar(msg: string): void {
    console.log(`[BASE] ${msg}`);
  }
}

class TransmissorReinf extends TransmissorBase {
  override logar(msg: string): void {
    super.logar(msg); // 先调用父类方法
    console.log(`[REINF] ${msg}`); // 然后添加额外行为
  }
}