我想知道man和child的共同点以及它们之间的区别。
class Person {
name: string;
age: number;
}
class child extends Person {}
class man implements Person {}
extends
表示:<< [新班级是孩子。它从继承中获得收益。它具有所有属性,方法作为其父级。它可以覆盖其中一些并实现新功能,但已经包含了父级内容。
implements
新类
可以视为相同的[[“形状”],而它不是孩子。可以将其传递给需要Person
的任何方法,而不管其父代与Person
更多...在OOP extends
...在大多数基于类的面向对象的语言中,继承是一种机制,其中一个对象获取父对象的所有属性和行为。继承使程序员可以:创建在现有类之上构建的类...
对于多态性,会更多(请参见wiki)。小引用:
implements
...多态性是为不同类型的实体提供单个接口...
因此,我们可以拥有与class Man
完全不同的继承树。
class Man extends Human ...
但是如果我们也声明可以假装为其他类型-Person
:
class Man extends Human implements Person ...
..然后我们可以在需要
Person
的任何地方使用它。我们只需要实现Persons的"interface"
(即,实施其所有公共内容)。JavaScript漂亮的面孔
implement
其他课程?那真的是很酷的东西(其中一项好处)
是Duck键入(see wiki)的内置支持。小引用:“如果它走路像鸭子,却像鸭子一样嘎嘎叫,那它一定是鸭子。”
因此,在Javascript中,如果两个不同的对象...将具有一个相似的方法,则可以将它们传递给期望它的函数:(例如
render()
)为避免丢失-我们可以在Typescript中做同样的事情-提供更多类型的支持。那是
function(engine){ engine.render() // any type implementing render() can be passed }
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
在这种情况下几乎就像实现接口一样。子对象可以假装它是父对象...但没有任何实现