接口和抽象类(JS)之间的区别

时间:2019-01-15 12:09:06

标签: javascript interface abstract-class

抽象类的局限性在于,子类只能扩展单个抽象类。因此,可以在接口中找到多重继承。

接口可以像抽象类一样具有具体的方法,但是不能具有实例字段,只能具有公共,静态和最终字段。

当我得出结论,唯一的区别在于接口根本不能具有实例字段这一事实时,我是否纠正?

2 个答案:

答案 0 :(得分:0)

接口仅描述应实现哪些属性和方法,而没有描述方法应如何工作。

但是抽象类可以描述方法的工作方式,就像常规类一样。例如:

abstract class MyClass {
   abstract method_1() // a method with no implementation

   method_2() { // a method with implementation
      // do something
   }
}

界面如下:

interface MyInterface {
   method_1(): void;
   method_2(): string;
}

答案 1 :(得分:0)

interface通常是某种类型声明,而classabstract classclass声明,在JS中它们只是构造函数,尽管它们通常定义特定的“类型”的值。 abstract是两者之间的一种特殊情况,因为它们定义了一个新的具体值(JS中的构造函数),但是如果不进行子类化就无法实例化。

最底行,interfaces是在类型空间中的声明,而[abstract] class是在值空间中的声明。例如,在打字稿中,您可以使用class implements桥接两者。在JavaScript中,术语“接口”通常是指某些API返回的特定值类型的行为的一般形式(请参见https://developer.mozilla.org/en-US/docs/Web/API/Event,其中术语interface用于描述不同类型的事件)。 / p>