Mixins - ShenYj/ShenYj.github.io GitHub Wiki
Mixins 就是在类中混入其他功能
在 Dart 中使用 mixins 实现类似于都继承的功能
class Musician extends Performer with Musical {
// ···
}
class Maestro extends Person with Musical, Aggressive, Demented {
Maestro(String maestroName) {
name = maestroName;
canConduct = true;
}
}
Dart2.x中的条件
- 作为 mixins的类只能继承自object, 不能继承其他类
- 作为mixins的类不能有构造函数
- 一个类可以mixins多个mixins类
- mixins绝不是继承,也不是借口,而是一种全新的特性
目前 3.x下 使用
mixins
定义一个mixins类,继承和定义构造函数时都会编译报错
定义一个 mixins
mixin Musical {
bool canPlayPiano = false;
bool canCompose = false;
bool canConduct = false;
void entertainMe() {
if (canPlayPiano) {
print('Playing piano');
} else if (canConduct) {
print('Waving hands');
} else {
print('Humming to self');
}
}
}
-
使用mixins 实现多继承
mixin class A { String name; printA(); } mixin class B { printB(); } class E { int e; E(this.e); } /// 将 implements 替换为 with /// E 有构造函数, 也无法作为 mixins 类被 Z 继承 (但是可以直接继承,比如 `class Z extends E with A, B`) class Z with A, B { @override String name; @override printA() { } @override printB() { } }