当前位置: 首页 > 知识库问答 >
问题:

在typescript中接口和抽象类有什么区别?

步博艺
2023-03-14

我发现他们有同样的限制。

interface IPerson {
  name: string;
  talk(): void;
}

interface IVIP {
  code: number;
}

abstract class Person {
  abstract name: string;
  abstract talk(): void;
}

class ManagerType1 extends Person {
  // The error I get is that I need to implement the talk() method
  // and name property from its base class.
}

class ManagerType2 implements IPerson {
  // The error I get is that I need to implement the talk() method 
  // and the name property from the interface.
}


class ManagerType3 implements IPerson, IVIP {
  // Now the error I get is that I need to implement all the 
  // properties and methods of the implemented interfaces to the derive class
}

正如我所发现的,这两者之间没有明显的区别,因为它们都实施了相同的限制。我唯一注意到的是继承和实现。

  1. 类只能扩展到单个基类
  2. 一个类可以实现多个接口
class ManagerType3 extends Person implements IPerson, IVIP {
  // Now the restriction is you need to implement all the abstract
  // properties and methods in the based class and all 
  // the properties and methods from the interfaces
}

共有1个答案

容修贤
2023-03-14

接口是定义属性和实现它的对象可以做什么的契约。例如,您可以定义管道工和电工可以做什么:

interface Electrician {
  layWires(): void
}

interface Plumber {
  layPipes(): void
}

然后,您可以使用接口的服务:

function restoreHouse(e: Electrician, p: Plumber) {
  e.layWires()
  p.layPipes()
}

请注意,实现接口的方式是免费的。您可以通过实例化一个类或使用一个简单的对象来实现:

let iAmAnElectrician = {
  layWires: () => { console.log("Work with wires…") }
}
abstract class HouseRestorer {
  protected abstract layWires(): void
  protected abstract layPipes(): void
  restoreHouse() {
    this.layWires()
    this.layPipes()
  }
}

这个抽象类HouserEstoreR定义如何使用LaywiresLaypipes方法,但是在使用它之前,由子类来实现专门的处理。

抽象类是一种传统的OOP方法,在JavaScript中并不传统。

这两种方法都允许做相同的事情。但它们是解决问题的两种不同方法。

 类似资料:
  • (1)接口 接口使用interface修饰; 接口不能实例化; 类可以实现多个接口; ①java8之前,接口中的方法都是抽象方法,省略了public abstract。②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现; (2)抽象类 抽象类使用abstract修饰; 抽象类不能被实例化; 抽象类只能单继承; 抽象类中可以包含抽象方法和非抽象方法,非抽象

  • 问题内容: 我不清楚两者之间的区别。 谢谢 问题答案: 它们非常相似,但是存在一些重要的技术差异: 抽象类允许您为某些方法提供默认的实现,但是接口不允许您提供任何实现。 您可以实现多个接口,但只能从一个抽象类继承。 这些差异影响应使用两种技术的方式: 您应该使用接口来 定义合同 。 抽象类对于 重用代码 很有 用 ……但是请注意,它不是重用代码的唯一方法。您还应该考虑其他方法,例如遏制。

  • 据我所知,唯一剩下的区别(除了一些潜在的效率问题之外)是抽象类遵循传统的Java单继承,而接口可以有多继承(或者多实现,如果你愿意的话)。这又引出了另一个问题-- 新的Java8接口如何避免菱形问题?

  • 本文向大家介绍接口和抽象类的区别是什么?相关面试题,主要包含被问及接口和抽象类的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:抽象类 Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 类可以实现很多个接口,但是只能继承一个抽象类 类可以不实现抽象类和接口声明的所有方法,当然,在这种情

  • 本文向大家介绍抽象类和接口的区别是什么?相关面试题,主要包含被问及抽象类和接口的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。 构造函数:抽象类可以有构造函数;接口不能有。 实现数量:类可以实现很多个接口;但只能继承一个抽象类【java只支持单继承】。 访问修饰符:接口中的方法默认使用 pub

  • 在TypeScript中,当创建.d.ts源代码声明文件时,哪个更可取,为什么? 或 我能说出的区别是接口不能有静态方法,所以你必须为此使用一个类。两者都不产生任何JS输出,所以也许没关系?