gpt4 book ai didi

typescript - TypeScript 中的 'extends' 和 'implements' 有什么区别

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:52 26 4
gpt4 key购买 nike

我想知道ManChild 的共同点和不同点。 p>

class Person {
name: string;
age: number;
}
class Child extends Person {}
class Man implements Person {}

最佳答案

精简版

  • extends 意味着:

新类(class)是一个 child 。它获得继承带来的好处。它具有其父级的所有属性和方法。它可以覆盖其中的一些并实现新的,但父级的内容已经包含在内。

  • implements 意味着:

新类可以被视为相同的“形状”,但它不是子类 .它可以传递给需要 Person 的任何方法,而不管其父级与 Person 不同。

更多...

OOP (像 C# 或 Java 这样的语言)我们会使用

extendsinheritance 中获利.

... Inheritance in most class-based object-oriented languages is a mechanism in which one object acquires all the properties and behaviours of the parent object. Inheritance allows programmers to: create classes that are built upon existing classes ...

implements 将更多用于 polymorphism .

... polymorphism is the provision of a single interface to entities of different types...

所以我们可以为我们的类 Man 拥有一个完全不同的继承树:

class Man extends Human ...

但如果我们还声明 Man 可以伪装成 Person 类型:

class Man extends Human 
implements Person ...

...然后我们可以在任何需要 Person 的地方使用它。我们只需实现 Person 的“接口(interface)”(即实现其所有公共(public)内容)。

实现其他类?这真的很酷

Javascript 的漂亮面孔(好处之一)是对 duck typing 的内置支持。 .

"If it walks like a duck and it quacks like a duck, then it must be a duck."

因此,在 Javascript 中,如果两个不同的对象有一个相似的方法(例如 render()),它们可以被传递给一个需要它的函数:

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

为了不在 Typescript 中丢失它,我们可以通过更多的类型化支持来做同样的事情。这就是

class implements class

在有意义的地方有它的作用。

在 OOP 语言中,如 C#,没有办法做到这一点。

文档在这里应该有所帮助:

Interfaces Extending Classes

When an interface type extends a class type it inherits the members ofthe class but not their implementations. It is as if the interface haddeclared all of the members of the class without providing animplementation. Interfaces inherit even the private and protectedmembers of a base class. This means that when you create an interfacethat extends a class with private or protected members, that interfacetype can only be implemented by that class or a subclass of it.

This is useful when you have a large inheritance hierarchy, but wantto specify that your code works with only subclasses that have certainproperties. The subclasses don’t have to be related besides inheritingfrom the base class. For example:

class Control {
private state: any;
}

interface SelectableControl extends Control {
select(): void;
}

class Button extends Control implements SelectableControl {
select() { }
}

class TextBox extends Control {
select() { }
}

// Error: Property 'state' is missing in type 'Image'.
class Image implements SelectableControl {
private state: any;
select() { }
}

class Location {

}

所以,虽然

  • extends 意味着它从它的父级获取所有内容
  • implements 在这种情况下,它几乎就像实现一个接口(interface)。一个子对象可以假装它是它的父对象......但它没有得到任何实现。

关于typescript - TypeScript 中的 'extends' 和 'implements' 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com