mixin
是将一些有共同特性的类抽出来共用,把具体的特性封装成一个mixin
供其他类使用。本质上是为了减少代码冗余。而implement
也能实现这种功能,但是继承自implement的子类需要完全重写父类的所有属性与方法,这就造成了很多不必要的代码冗余。
mixin
在使用上有如下特点:
-
mixin
在定义时可以使用on
关键字指定使用范围
mixin swim on fish {
//具体实现
}
- 当多个
mixin
函数一样时,后一个mixin
会覆盖前面一个(线性特征)
class S {
fun()=>print('A');
}
mixin MA {
fun()=>print('MA');
}
mixin MB {
fun()=>print('MB');
}
class A extends S with MA,MB {}
class B extends S with MB,MA {}
======
main() {
A a = A();
a.fun();
B b = B();
b.fun();
}
=====
MB
MA
-
mixin
可以实现蕾丝多重继承的功能,但是多重继承中相同函数执行并不会存在父子关系 -
mixin
实现了一条继承链,声明的顺序代表了继承的顺序,声明在后面的mixin
会最先执行 - 而最终的子类与该继承链上所有类的类型(
runtimeType
)都能匹配上,即子类拥有所有mixin
类的特性。