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}`); // 然后添加额外行为
}
}