前面章节提到Dart语言的类是单继承的(只能继承一个父类),如果我们要想实现类似多继承的效果,可以使用mixin机制,又叫混入机制,例如把类A混入到类B中,那么类B就拥有了类A的成员,跟继承的特性非常相似。
提示:mixin机制也是一种复用已有代码的机制。
例子:
// 定义一个可以被mixin的类,使用mixin代替class关键词
// 注意:不能定义构造方法,其他的跟普通的类一样
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');
}
}
}
// 使用with关键词可以混入多个mixin类,类之间使用逗号分隔。
class Musician with Musical {
// Musician什么也没定义,就拥有了,Musical的所有成员
}
void main() {
// 实例化Musician
var p = Musician();
// 调用混入的方法
p.entertainMe();
}
当然你也可以在混入类的同时继承父类,例如:
// 继承了Person,同时混入了Musical, Aggressive, Demented三个类
class Maestro extends Person
with Musical, Aggressive, Demented {
}