假设我有一个纯抽象类(即没有任何实现的抽象类):
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(使用前将#替换为@)