理解 Dart 中的 'implements' 和 'with'

Understanding 'implements' and 'with' in Dart

我正在阅读 Dart 语言规范并探索一门有趣的新语言。 As Dart language specification says:Dart 有 implicit interfaces。这意味着每个 class 也是一个 interface。所以,如果我想实现另一个 class 的某些行为,implements 子句是我唯一需要的。

另外,Dart 支持 mixins。这样我们就可以使用 with 关键字从另一个 class 获取方法的实现。

因此,假设如果抽象 class A 定义方法 a() 如下:

abstract class A {
  void a();
}

和另外两个具体的 class B 定义了方法 a() 但没有实现 class A,例如:

class B {
  void a() {
    print("I am class B");
  }
}

和 class C 使用 Mixin B 实现 class A,例如:

class C extends Object with B implements A {
   ...
}

在这里,我有几个问题。如果 class 实现接口并且还使用具有相同方法名称的方法实现的mixin;它不会使 cycling inheritance 成为可能吗? class C 的行为是什么?是需要实现a()还是会被mixin B隐式实现?

我刚开始学 Dart,mixins 之类的概念对我来说很陌生。任何人都可以通过回答我的问题来帮助我理解吗?

您的 link 是 语言导览 ,而不是 specification,但导览绝对是您应该从阅读开始的。

你的例子很好。 class C extends Object with B { ... } 基本上将 B 的成员添加到对象以创建 C。如果 C 然后满足接口 A,它可以声明对该接口的支持(implements A)。

Mixins 是一种有限的多重继承。对于 C with BC 继承了 void a() 的实现。添加 implements A 不需要再做任何事情,因为 C 已经履行了它声称由 implements A 履行的合同,因为 B.