📜  TypeScript 中的方法覆盖(1)

📅  最后修改于: 2023-12-03 15:35:24.307000             🧑  作者: Mango

TypeScript 中的方法覆盖

在 TypeScript 中,我们可以通过继承及方法覆盖来扩展已有的类,从而让代码更加复用和灵活。

继承

继承是面向对象编程的核心概念之一,它可以让子类继承父类的属性和方法,从而复用父类的代码。在 TypeScript 中,我们使用 extends 关键字来实现继承。

class Animal {
  name: string;

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

  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log('Woof! Woof!');
  }
}

const dog = new Dog('Snuffy');
dog.move(10); // Snuffy moved 10m.
dog.bark(); // Woof! Woof!

在上面的代码中,Dog 类继承了 Animal 类,并新增了 bark 方法。

方法覆盖

在子类中,我们可以通过覆盖父类的方法来改变方法的行为。在 TypeScript 中,我们可以使用 super 关键字来调用父类的方法。

class Animal {
  name: string;

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

  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }
}

class Snake extends Animal {
  move(distanceInMeters: number = 5) {
    console.log(`${this.name} slithered ${distanceInMeters}m.`);
    super.move(distanceInMeters);
  }
}

const snake = new Snake('Sammy');
snake.move(); // Sammy slithered 5m. Sammy moved 5m.

在上面的代码中,Snake 类覆盖了 Animal 类的 move 方法,并新增了打印蛇爬行的信息。而在 move 方法中,我们使用了 super.move 来调用父类的 move 方法,从而实现了方法的覆盖和扩展。

总结

通过继承和方法覆盖,我们可以在 TypeScript 中扩展已有的类,让代码更加复用和灵活。同时,通过 super 关键字的使用,我们可以在子类中调用父类的方法,达到方法覆盖和扩展的效果。