繁体   English   中英

Dart:Dart 中的实现和扩展有什么区别

[英]Dart: What is the difference between implements and extends in Dart

https://dart.dev/guides/language/language-tour#implicit-interfaces

我见过使用“实现”的代码,所以我正在研究“实现”。 但是通过查看官方文档,我无法真正分辨出与扩展的区别。

查看官方文档(上一页)中的示例代码,看起来它只是在做它可以用扩展实现的功能。 然后我想知道它是否应该使用“扩展”。 我想到目前为止我已经了解了继承(扩展)和混合(与)。 Dart文档中也提到了“接口”这个词,但是对“接口”有明确的定义。 我什至找不到它在哪里。 我对其他语言的接口了解不多,所以很难得到图像。

继承和实现之间究竟有什么区别? 因为区别,什么时候用继承“extends”,什么时候用实现“implements”?

样本中是否有明显不同的地方?

给定类MyClass

  • MyClass extends Foo是经典的继承。 MyClass是一个Foo
  • MyClass implements Bar声明实现者符合Bar接口。 MyClass “看起来”像一个Bar
  • MyClass with Batz在接口和实现中是“混合”的。 MyClass “行为”就像一个Batz

MyClass可以根据需要实现和混合尽可能多的接口(有一些限制),但只能从一个接口扩展。

除了其他解释外,dart 不允许开发人员使用多重继承,因此可以只有一个extends ,但是可以有多个implements
因此,一个类只能是一个类的子类型(父类的父类除外),但接口定义了实现它的类的行为,一个类可以有不同的行为。

一个简单的类比来自动物。 如果我们假设动物有不同的行为,例如游泳界面为 ISwimmer,运行界面为 IRunner,飞行界面为 IFlyer。 例如,鱼类动物。 这使得它扩展了 Animal 类。 此外,鱼具有游泳行为,因此它为此目的实现了 ISwimmer 接口。

如果您只想了解它们在概念上的不同之处,那么

你扩展一个类。 当您扩展您的父亲或您的父亲是您的基类时,可以考虑一下。

您实现了一个接口(这只是一个纯粹的抽象类)。 就像法拉利实施汽车一样。

接口不能有实例。 例如 - 你见过任何汽车吗? 答案是否定的,您已经看到了实现 CAR 的汽车类型,即福特、丰田,因此汽车充当其他公司或您可以说类(法拉利)实现的接口。

你必须实现汽车的每一个特性才能被称为汽车,这就是为什么接口的每个方法都需要实现,我们说 x “实现” y。

在扩展中,您可以覆盖某些内容并跳过另一个内容,假设您的鼻子可能看起来像您的父亲,但您的耳朵却不是。

将接口视为骨架或只是一个空类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM