Flutter/Dart mixin类的理解

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类的特性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。