【问题标题】:Dart: What is the difference between implements and extends in DartDart:Dart 中的 implements 和 extends 有什么区别
【发布时间】:2021-01-10 08:00:18
【问题描述】:

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

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

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

继承和实现之间到底有什么区别? 因为不同,什么时候用继承“extends”,什么时候用实现“implements”?

样本中是否存在明显差异?

【问题讨论】:

  • 你链接到的页面试图解释它(也许没有它应该的那么清楚):“如果你想创建一个支持 B 类 API 的类 A 而不继承 B 的实现,那么 A 类应该实现B接口。”

标签: flutter dart


【解决方案1】:

给定班级MyClass:

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

MyClass 可以根据需要实现和混合任意数量的接口(存在一些限制),但只能从一个接口扩展。

【讨论】:

  • 感谢您提供通俗易懂的解释。
  • 粗略总结一下Dart, ● 首先继承只能是单继承 ● 毕竟implementation和mixin在implementation destination和mixin destination都保证成员的存在,但是Semantically Implementation “implements”有一个很大的含义,它强制实现目标类实现成员,以实现多态性。 (需要所有成员的实现) mixin 的主要目的是通过重用代码来提高代码更改时的可维护性。是这样的吗?
【解决方案2】:

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

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

【讨论】:

  • 感谢您提供通俗易懂的解释。
  • 粗略总结一下Dart, ● 首先继承只能是单继承 ● 毕竟implementation和mixin在implementation destination和mixin destination都保证成员的存在,但是Semantically Implementation “implements”有一个很大的含义,它强制实现目标类实现成员,以实现多态性。 (需要所有成员的实现) mixins 的主要目的是通过重用代码来提高代码更改时的可维护性。是这样的吗?
【解决方案3】:

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

你扩展了一个类。当你扩展你的父亲或者你的父亲是你的基类时想想它。

你实现了一个接口(它只是一个纯粹的抽象类)。就像法拉利制造汽车一样。

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

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

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

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

【讨论】:

  • 粗略总结一下Dart, ● 首先继承只能是单继承 ● 毕竟implementation和mixin在implementation destination和mixin destination都保证成员的存在,但是Semantically Implementation “implements”有一个很大的含义,它强制实现目标类实现成员,以实现多态性。 (需要所有成员的实现) mixins 的主要目的是通过重用代码来提高代码更改时的可维护性。是这样的吗?
  • 感谢您提供通俗易懂的解释。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2016-04-06
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多