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
。