什么是 Typescript 中的抽象类

抽象类 – 总结

What are Abstract Classes in Typescript

打字稿中的抽象类:

  • 不能用于直接创建对象——不能使用new关键字直接实例化抽象类
  • 只能作为父类
  • 可以包含方法和属性的实际实现,其中实现的方法可以引用抽象属性/方法
  • 可以让子类承诺实现在父类上定义的抽象方法/属性

抽象类与接口

  • 当抽象类被编译为 javascript 时,与接口相反,它们并没有被完全删除。这意味着我们可以instanceof
    对类而不是接口使用检查。
  • 抽象类也可以有实现的方法,而接口只有应该实现方法的蓝图。

抽象类示例

让我们看一个简单的例子:

abstract class Animal { // no implementation - just the signature abstract type: string; abstract move(): void; // has implementation; breathe() { console.log(`The ${this.type} takes a breath.`); } } // Not permitted to create an instance of an abstract class // const animal = new Animal() class Dog extends Animal { type = 'dog'; move() { console.log('The dog runs.'); } } class Monkey extends Animal { type = 'monkey'; move() { console.log('The monkey jumps.'); } } const dog = new Dog(); // can use the implemented method from the abstract class dog.breathe(); // or the methods for which the child class provides implementation dog.move(); const monkey = new Monkey(); monkey.breathe(); monkey.move();

当我们扩展一个抽象类时,我们被迫为
abstract方法或属性提供实现,换句话说,要符合抽象类强制执行的签名。

我们还可以使用抽象类方法实现的方法,就像继承正常工作的方式一样,任何扩展 animal 的类都可以访问breathe继承中定义的方法。请注意,在
breathe我们使用抽象属性的方法中,在抽象类的实现方法中,我们可以使用任何abstract属性或方法,因为我们保证子类必须实现它们。

我们可以将抽象属性/方法视为 – 存在于未来,或者换句话说,由某个子类实现。

何时使用抽象类

当我们abstract classes想要提供某些功能的可重用实现时使用,但该功能可能依赖于我们还无法实现的其他一些功能,因为它们是非常特定于扩展抽象类的不同子类的功能。

例如,我们可以想象该move方法的实现在扩展该类的不同子类之间可能会有很大不同abstract
然而,在未来的某个时间点,所有的子类都会有一个
move符合类中指定类型的方法
版本
abstract

发表评论