https://dart.dev/guides/language/language-tour#implicit-interfaces
我见过使用“实现”的代码,所以我正在研究“实现”。但是我真的不能通过查看官方文档来区分extends。
看看官方文档中的示例代码(上页),看起来它只是做了它可以用实现扩展做的事情。然后我想知道它是否应该使用“extends”。到目前为止,我想我已经理解了继承(extends)和mixins(with)。在Dart文档中也提到了“接口”这个词,但对“接口”有明确的定义。我甚至找不到它在哪里。我对其他语言的接口没有太多的了解,所以很难得到一个图像。
继承和实现的区别到底是什么?由于这一区别,什么时候使用继承“extends”,什么时候使用实现“implements”?
样本中是否有明显的差异?
4条答案
按热度按时间jdzmm42g1#
给定类
MyClass
:MyClass extends Foo
是经典的继承。MyClass
是Foo
MyClass implements Bar
声明实现者符合Bar
接口。MyClass
“看起来”像Bar
MyClass with Batz
在接口和实现上是“混合”的。MyClass
的“行为”类似于Batz
。MyClass
可以根据需要实现和混合任意多个接口(有一些限制),但只能从一个接口扩展。mbskvtky2#
除了其他解释,dart不允许开发人员使用多重继承,因此只能有一个extends,但可以有多个implements。
因此,一个类只能是一个类的子类型(父类的父类除外),但接口定义了实现它的类的行为,一个类可以有不同的行为。
一个简单的类比来自动物。如果我们假设动物有不同的行为,如游泳界面为ISwimmer,跑步界面为IRunner,飞行界面为IFlyer。例如,一个Fish类**是一个Animal。这使得它扩展了Animal类。此外,鱼有游泳的行为,因此它实现了ISwimmer接口。
ffvjumwh3#
如果你只是想了解它们在概念上的不同,
扩展一个类。把它想象成你扩展了你的父亲或者你的父亲是你的基类。
你实现了一个接口(它只是一个纯粹的抽象类)。就像法拉利实现了一辆车。
接口不能有示例。例如:你有没有看到一辆车?答案是否定的,你已经看到了一些类型的汽车,例如福特,丰田,它们实现了CAR,所以汽车作为其他公司或你可以说,类(法拉利)实现的接口。
你必须实现一辆车的每一个功能才能被称为一辆车,这就是为什么一个接口的每一个方法都需要被实现,我们说x“实现”y。
在延伸中,你可以忽略一些东西而跳过另一些东西,假设你的鼻子看起来像你的父亲,但你的耳朵不像。
可以将接口看作是一个框架或一个空类。
oknwwptz4#
另一个定义,可能会帮助你得到的一点..使用extends使class继承(扩展)他的父类,即使你不覆盖父类的属性,你也可以使用父类的属性,除了他自己的属性和方法之外的方法,你还应该验证这个类(孩子)提交了它的父类,并且没有打破父类的限制。其中作为
当你希望类只限于抽象类属性,但你有自己的实现这些属性时,使用实现。