TypeScript接口扩展类中的'extends'和'implements'有什么区别

问题描述 投票:77回答:4

我想知道manchild的共同点以及它们之间的区别。

class Person {
  name: string;
  age: number;
}
class child extends Person {}
class man implements Person {}
typescript extends implements
4个回答
102
投票

简短版

  • extends表示:

<< [新班级是孩子。它从继承中获得收益。它具有所有属性,方法作为其父级。它可以覆盖其中一些并实现新功能,但已经包含了父级内容。

  • implements
意思是:

新类

可以视为相同的[[“形状”],而它不是孩子。可以将其传递给需要Person的任何方法,而不管其父代与Person更多...OOP

(类似C#,Java等语言)中,我们将使用

extends

从继承中获利(请参阅wiki)。小引用:

...在大多数基于类的面向对象的语言中,继承是一种机制,其中一个对象获取父对象的所有属性和行为。继承使程序员可以:创建在现有类之上构建的类...

对于多态性,

implements

会更多(请参见wiki)。小引用:

...多态性是为不同类型的实体提供单个接口...

因此,我们可以拥有与class Man完全不同的继承树。

class Man extends Human ...

但是如果我们也声明可以假装为其他类型-Person

class Man extends Human 
          implements Person ...

..然后我们可以在需要Person的任何地方使用它。我们只需要实现Persons的"interface"

(即,实施其所有公共内容)

implement其他课程?那真的是很酷的东西

JavaScript漂亮的面孔

(其中一项好处)

是Duck键入(see wiki)的内置支持。小引用:

“如果它走路像鸭子,却像鸭子一样嘎嘎叫,那它一定是鸭子。”

因此,在Javascript中,如果两个不同的对象...将具有一个相似的方法

(例如render()

,则可以将它们传递给期望它的函数:

function(engine){ engine.render() // any type implementing render() can be passed }

为避免丢失-我们可以在Typescript中做同样的事情-提供更多类型的支持。那是
class implements class

在有意义的地方,发挥其作用

在OOP语言中为C#。。。没有办法...

也该文档应该在这里提供帮助:

Interfaces Extending Classes

当接口类型扩展类类型时,它继承了类,但不是它们的实现。好像接口有声明了班级的所有成员而没有提供实施。接口甚至继承私有和受保护的基类的成员。这意味着当您创建界面时扩展带有私有或受保护成员的类,该接口类型只能由该类或其子类实现。

这在继承层次较大但需要指定您的代码仅适用于具有特定条件的子类属性。子类除了继承外不必关联从基类。例如:

class Control { private state: any; } interface SelectableControl extends Control { select(): void; } class Button extends Control { select() { } } class TextBox extends Control { select() { } } class Image extends Control { } class Location { select() { } }

所以,而

extends的意思是-它从其父级获得全部

    implements在这种情况下几乎就像实现接口一样。子对象可以假装它是父对象...但没有任何实现

76
投票

4
投票

1
投票
接口扩展了形状的接口
© www.soinside.com 2019 - 2024. All rights reserved.