class A {
String get foo;
}
class A1 implements A {
String get foo => "A1";
}
class A2 implements A {
String get foo => "A2";
}
mixin B on A {
String get foo => "B:${super.foo}";
}
class C extends A1 with B {
String get foo => "C:${super.foo}";
}
class D extends A2 with B {
String get foo => "D:${super.foo}";
}
void main() {
print(C().foo); // C:B:A1
print(D().foo); // D:B:A2
}
这里,同一个成员B.foo被混合到两个不同的类中,这两个类具有两个不同的超类。 类C和D都只有一个超类链。C的超类是匿名mixin应用程序类A1 with B,D的超类是不同的mixin应用程序类A2 with B。这两个类都包含mixin成员B.foo。 mixin不是多重继承,但它是在Dart中最接近的继承。
2条答案
按热度按时间lymnna711#
不,Dart不支持多个实现继承。
Dart有接口,和大多数其他类似的语言一样,它有多个接口继承。
对于实现,只有一个超类链,类可以从其中继承成员实现。
Dart确实有 * mixins *,它允许实现被多个类使用,但不像 * mixin应用程序 * 那样通过 * 继承 * 使用。
示例:
这里,同一个成员
B.foo
被混合到两个不同的类中,这两个类具有两个不同的超类。类
C
和D
都只有一个超类链。C
的超类是匿名mixin应用程序类A1 with B
,D
的超类是不同的mixin应用程序类A2 with B
。这两个类都包含mixin成员B.foo
。mixin不是多重继承,但它是在Dart中最接近的继承。
guicsvcw2#
实际上,这很简单。唯一需要理解的是,接口不是显式定义的。相反,Dart自动为所有类创建接口。这意味着你可以像实现接口一样实现一个类。对于纯接口,有抽象类。
下面是它的工作原理: