理解 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 B
,C
继承了 void a()
的实现。添加 implements A
不需要再做任何事情,因为 C
已经履行了它声称由 implements A
履行的合同,因为 B
.
我正在阅读 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 B
,C
继承了 void a()
的实现。添加 implements A
不需要再做任何事情,因为 C
已经履行了它声称由 implements A
履行的合同,因为 B
.