Dart 支持哪些多重继承机制?
不,Dart 不支持多个实现继承。
Dart 有接口,并且与大多数其他类似语言一样,它具有多个接口继承。
对于实现,只有一个超类链,类可以从中继承成员实现。
Dart 确实有 mixins,它允许多个类使用实现,但不是通过 继承 而是通过 mixin 应用程序。
示例:
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 中最接近的继承。
其实,这很简单。唯一需要理解的是接口没有明确定义。相反,Dart 会自动为所有类创建接口。这意味着您可以像实现接口一样实现类。对于纯接口,有抽象类。
其工作原理如下:
abstract class TestInterfaceA{
String getStringA();
}
abstract class TestInterfaceB{
String getStringB();
}
class TestInterfaceImplementer implements TestInterfaceA, TestInterfaceB{
@override
String getStringA() {
return "A";
}
@override
String getStringB() {
return "B";
}
}
main(){
test("TestInterfaceImplementer should be able to call method from TestInterface A", () {
TestInterfaceA testInterfaceA = TestInterfaceImplementer();
expect(testInterfaceA.getStringA(), "A");
});
test("TestInterfaceImplementer should be able to call method from TestInterface B", () {
TestInterfaceB testInterfaceB = TestInterfaceImplementer();
expect(testInterfaceB.getStringB(), "B");
});
}