我想知道 Man 和 Child 有什么共同点以及它们有何不同。
class Person {
name: string;
age: number;
}
class Child extends Person {}
class Man implements Person {}
原文由 davejoem 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想知道 Man 和 Child 有什么共同点以及它们有何不同。
class Person {
name: string;
age: number;
}
class Child extends Person {}
class Man implements Person {}
原文由 davejoem 发布,翻译遵循 CC BY-SA 4.0 许可协议
基本上:
extends
会得到父类的所有属性和方法。implements
将要求我们实现接口中定义的所有属性和方法。原文由 Pouya Jabbarisani 发布,翻译遵循 CC BY-SA 4.0 许可协议
精简版
extends
表示:新班是一个孩子。它得到继承带来的好处。它具有其父级的所有属性和方法。它可以覆盖其中的一些并实现新的,但是已经包含了父级的东西。
implements
表示:新类 可以被视为 相同的 “形状” ,但 它不是子 类。它可以传递给需要
Person
的任何方法,无论其父级是否与Person
不同。更多的 …
在 OOP (C# 或 Java 等语言)中,我们会使用
extends
从 继承 中获利。implements
将更多用于 多态性。所以我们可以为我们的类
Man
拥有一个完全不同的继承树:但如果我们还声明
Man
可以伪装成Person
类型:…然后我们可以在任何地方使用它
Person
是必需的。我们只需要实现Person
的“接口”(即实现其所有公共内容)。implement
其他类?这真是很酷的东西Javascript 的漂亮外观(好处之一)是对 鸭子类型 的内置支持。
因此,在 Javascript 中,如果两个不同的对象有一个相似的方法(例如
render()
),它们可以传递给期望它的函数:为了不在 Typescript 中丢失这一点,我们可以通过更多类型的支持来做同样的事情。这就是
有它的作用,它是有意义的。
在 OOP 语言中,如
C#
,没有办法做到这一点。文档应该在这里有所帮助:
所以,虽然
extends
意味着它从它的父母那里得到所有implements
在这种情况下,它几乎就像实现一个接口。子对象可以假装它是它的父对象……但它没有得到任何实现。