http://kevinwu.cn/p/ae2ce64
上面这篇文章讲得很好,我总结一下
如果class继承或者实现了多个类,同一个方法调用的时候,实际使用的是哪个方法优先级如下
with>extend>implements
如果with后面跟了多个类,后面的优先级大于前面的
增加一种情况,代码如下:
abstract class Super {
void method() {
print("Super");
}
}
class MySuper implements Super {
void method() {
print("MySuper");//第8行
}
}
mixin MyMixin on Super {
void method() {
super.method();//第15行
print("Sub");
}
}
class Client extends MySuper with MyMixin {}
void main() {
Client().method();
}
这种情况应该输出什么呢?
会输出
MySuper
Sub
MyMixin on Super
意思是限定子类必须继承或实现Super,因为MyMixin使用了Super提供的功能。
第15行调用super.method()
会先查找MyMixin
中有没有对应的方法,发现有该方法,然后因为MyMixin
限定子类必须继承或实现Super
,所以第15行方法中的super.method()
会调用MyMixin
的子类所extend
的父类的method
方法,在这里就是MySuper
的method()
方法,所以输出MySuper
,然后输出Sub
。