参考:https://blog.csdn.net/mqdxiaoxiao/article/details/102953803/
1. mixin解决的问题是在不用继承的情况下复用带有实现的代码块。1. 避免多重继承,2.避免接口(虚类)不能带实现代码的问题。3. 避免组合要在类中定义一个实例变量的问题
2 用法, class A extends 父类B with mixin C
3. 限制, mixin不能有构造函数
4. 多个mixin间,mixin与类, mixin与父类具有同名函数的覆盖规则
1)后面混入的覆盖前面混入的Mixin的同名方法
2)Mixin不会覆盖被混入类自带的同名方法
3)Mixin会覆盖被混入类的父类同名方法
可以理解为越后定义(引入)的函数会覆盖前边的同名函数比如
class A extends 父类B with mixin C , mixin D{
void p(){}
}
如果类A, 父类B, mixin C, mixin D都定义的函数p , 从定义(引入)p函数的顺序是 父类B->mixin C->mixin D->A类复写。 所以
1. 类A继承父类B, 所以引入了父类B的p函数
2. 混合mixin C时, mixin C的p函数会替换父类B的p函数
3.混合mixin D时 mixin D的p函数会替换mixin C的p函数
4. 最后在A类复写了p函数,所以A重新定义的p函数会替换mixin D的p函数
5. 所以最后是类A重新定义的p函数有效执行。
如果A类没有定义p函数,则会执行mixin D定义的p函数, 如果mixin D也没有定义p函数,则使用mixin C的p函数...如此类推