在 TypeScript 中扩展与实现纯抽象类

2024-01-25

假设我有一个纯抽象类(即没有任何实现的抽象类):

abstract class A {
    abstract m(): void;
}

就像在 C# 和 Java 中一样,我可以extend抽象类:

class B extends A {
    m(): void { }
}

But unlike在 C# 和 Java 中,我也可以实施抽象类:

class C implements A {
    m(): void { }
}

怎样上课B and C表现不同?为什么我会选择其中之一而不是另一个?

(目前,TypeScripthandbook http://www.typescriptlang.org/Handbook and 语言规范 https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md不涵盖抽象类。)


The 实施关键字将 A 类视为接口,这意味着C必须实现A中定义的所有方法,无论他们是否有实施A。而且也没有调用 super 方法C.

extends其行为更像您对关键字的期望。您只需实现抽象方法,并且超级调用可用/生成。

我想在抽象方法的情况下它没有什么区别。但你却很少有class仅使用抽象方法,如果你这样做,最好将其转换为界面.

通过查看生成的代码,您可以轻松地看到这一点。我做了一个游乐场的例子here http://www.typescriptlang.org/Playground#src=abstract%20class%20A%20%7B%0A%20%20%20%20abstract%20m()%3A%20void%3B%0A%09otherM()%20%7B%0A%09%09console.log(%22otherm%22)%3B%0A%09%7D%0A%7D%0A%0Aclass%20B%20extends%20A%20%7B%0A%20%20%20%20m()%3A%20void%20%7B%20%7D%0A%7D%0A%0Aclass%20C%20implements%20A%20%7B%0A%20%20%20%20m()%3A%20void%20%7B%20%7D%0A%7D.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TypeScript 中扩展与实现纯抽象类 的相关文章

随机推荐