【问题标题】:The difference between Interface and Abstract class (JS)接口和抽象类(JS)的区别
【发布时间】:2019-01-15 12:09:05
【问题描述】:

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

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

当我断定唯一的区别在于接口根本不能具有实例字段这一事实时,我是否正确?

【问题讨论】:

  • 你说的是什么语言?
  • JavaScript,抱歉。
  • 他们确实有@Jay
  • JavaScript 中没有“接口”和“抽象类”。你是在说 TypeScript 吗?

标签: javascript interface abstract-class


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    接口只描述应该实现哪些属性和方法,而不描述方法应该如何工作。

    但是抽象类可以描述一个方法是如何工作的,就像在普通类中一样。例如:

    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;
    }
    

    【讨论】:

    • 你可以在一个方法之前写“default”,让它在接口中抽象。
    • 这不是 JavaScript 吗?!
    • @Bergi 这是 TypeScript
    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2011-03-02
    • 2010-12-27
    • 2016-11-28
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多