Dart的mixin簡單講解

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方法,在這里就是MySupermethod()方法,所以輸出MySuper,然后輸出Sub

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,897評論 2 59
  • 我, 走進了記憶的戰場, 號角響徹天際, 卻只剩下孤身一人的沉默。 我, 翱翔于自由的天空, 鮮花漫山遍野, 卻保...
    人間日月閱讀 176評論 0 1
  • 如果你有職業困惑建議看看這本書! 推薦書名:《優秀到不能被忽視》 1、只看書名你會覺得這是一本勵志書,看內容,才了...
    進化姐閱讀 449評論 0 0
  • 圖文 | 王學藝 鄉愁是伴我長大的麥草老屋,鄉愁是風箱催生的裊裊炊煙,鄉愁是紡車抽出的綿綿長線,是下代人再也不懂的...
    王學藝閱讀 965評論 23 22
  • 《喂魚》 溫柔的陽光 灑滿荷塘 我買了一個大面包 來到湖邊喂魚 卻看不到小魚的身影 枯黃的荷葉 泛著點點微光 我撕...
    管小妤閱讀 356評論 0 7