在 Dart
中 可以使用 mixins
实现类似多继承的功能。
在 Dart
2.x 中使用 mixins
的条件:
- 作为
mixins
的类只能继承自 Object , 不能继承其他类 - 作为
mixins
的类不能有构造函数 - 一个类可以
mixins
多个mixins
类 mixins
不是继承,也不是接口,而是一种全新的特性
class P {
late String name;
P(String this.name);
}
// 注意 , mixins 的类不能够继承其他类, 否则报错
/*
abstract class A extends P {
A(){} // 并且它不能够有 构造函数
printA();
}
*/
abstract class A {
printA();
}
abstract class B {
printB();
}
// with 关键词 表示 mixins 功能, 它类似于 多个接口 功能
class C extends P with A,B{
C(String name) : super(name);
@override
printA() {
print('A');
}
@override
printB() {
print('B');
}
}
// 注意: C 类 的顺序决定了 mixins 的同名方法的打印, 假如 A 和 B 都拥有相同的方法, 那么, 上述的C类mixins则会输出 B 的同名方法。
// 还有 , C 类 是 A 或者 B 的超类, 所以都是 true
void main() {
C c = new C('lynn');
print(c is C); // true
print(c is A); // true
print(c is B); // true
}