2021-03-15 dart語言中的多繼承實現(xiàn)方式

在 Dart 語言中,是不支持多繼承的,這是由語言設(shè)計決定的陈惰。但是 Flutter 提供了一種類似多繼承的方式,即使用 Mixin毕籽。

Mixin 是一種在類中重用一個或多個類中代碼的方式抬闯。在 Flutter 中,我們可以使用 Mixin 來組合多個類的功能关筒,從而實現(xiàn)類似多繼承的效果溶握。

class (普通類)
abstract class 類(抽象類)
mixin類(混入類)

mixin類,與abstract class有些通用的地方蒸播,可以理解為abstract class的升級版睡榆。

  • 它相對于abstract class說,可以同時混入多個Mixin袍榆。
  • 并且可以通過on關(guān)鍵字來限制使用范圍胀屿。

1、三種類:

  • class 普通類 (成員方法必須要實現(xiàn))
    聲明一個類包雀,提供具體的成員變量和方法實現(xiàn)宿崭。

  • abstract class 抽象類 (定義抽象方法)
    聲明一個抽象類,抽象類將無法被實例化才写。抽象類常用于聲明接口方法葡兑、有時也會有具體的方法實現(xiàn)。

  • mixin 混入類(不能有構(gòu)造方法)
    聲明一個Mixin類赞草,與抽象類一樣無法被實例化铁孵,是一種在多重繼承中復(fù)用某個類中代碼的方法模式,可以聲明接口方法或有具體的方法實現(xiàn)房资。
    mix不支持extends繼承和with混入 其他類√赐罚可以implements實現(xiàn)其他類轰异。
    參考:https://juejin.cn/post/7094642592880525320

2、繼承暑始、混入搭独、實現(xiàn)、約束廊镜, 4個關(guān)鍵字:

  • 1牙肝、extends 繼承
    繼承,和其它語言的繼承沒什么區(qū)別。

  • 2配椭、with 多繼承(父類不能有構(gòu)造方法)
    使用Mixin模式混入一個或者多個Mixin類虫溜。
    特點:
    mixin類确封,可以with (混入)類香缺,抽象類(這里的類和抽象需要:無任何繼承和混入的類)、 mixin類盹憎。支持on
    mixin類不能混入和繼承其他類敦姻。

  • 在面向?qū)ο蟮木幊陶Z言中瘾境,Mixin是包含供其他類使用的方法的類,而不必是其他類的父類镰惦。其他類如何訪問Mixin的方法取決于語言迷守。Mixin有時被描述為“包含的”而不是“繼承的”。
    Mixins鼓勵代碼重用旺入,并且可用于避免多重繼承可能導(dǎo)致的繼承歧義(菱形問題)兑凿,或者用于解決語言中缺少對多重繼承的支持的問題。Mixin還可以被視為具有實現(xiàn)方法的接口眨业。這個模式是執(zhí)行依賴倒置原則的一個例子急膀。
  • c++棱形繼承和解決方法.棱形繼承,數(shù)據(jù)榮譽問題https://blog.csdn.net/m0_60447315/article/details/125929140
  • 繼承歧義龄捡,也叫菱形問題卓嫂,也叫做鉆石問題,或者有時被稱為致命的死亡鉆石聘殖。當(dāng)兩個B和C類繼承自A晨雳,D類繼承自B和C時產(chǎn)生歧義。如果A中有一個方法在B和C中已經(jīng)重寫奸腺,而D沒有重寫它餐禁,那么D繼承的方法的版本是B,還是C突照?
    https://cloud.tencent.com/developer/article/1381007
    pv64ku21r7.png
  • 3帮非、implements 繼承(父類方法必須要實現(xiàn))
    實現(xiàn)一個或多個接口并實現(xiàn)每個接口定義的API。

  • 4讹蘑、on 約束(繼承mixin類的類末盔,必須同時繼承約束類)
    限制Mixin的使用范圍。

  • 每一個類都隱式地定義了一個接口并實現(xiàn)了該接口座慰,這個接口包含所有這個類的成員變量以及這個類所實現(xiàn)的其它接口陨舱。
  • 如果想讓抽象類同時可被實例化,可以為其定義工廠構(gòu)造函數(shù)版仔。具體內(nèi)容可以參考:抽象類的實例化* mixin關(guān)鍵字在Dart 2.1中才被引用支持游盲。早期版本中的代碼通常使用 abstract class代替
WX20230202-141701@2x.png

3误墓、代碼實例

mixin ClassA {
  //專門定義為混入類 
  method1();
}

abstract class ClassA2 {
  method2(); //如果沒有加abstract,不是抽象類益缎。方法必須要實現(xiàn)
}

class ClassA4 {}

mixin ClassA3 on ClassA4 {
  //添加約束谜慌,繼承ClassA3的類,也必須繼承成ClassA4
  method3();
}

class ClassA5 {
  method4() {
    print("12");
  }
}

class ClassC implements ClassA5 {
  //implements必須要實現(xiàn)父類方法
  method4() {
    print("12");
  }
}

class ClassD extends ClassA5 {
  //

}

class ClassB extends ClassA5 with ClassA4, ClassA, ClassA2, ClassA3 {
  //with后面可以接抽象類, ClassA4必須要放在ClassA3前面
  //多繼承的方法一定要實現(xiàn)
  method1() {
    print("12");
  }

  //with后面的抽象類链峭,方法也一定要實現(xiàn)
  method2() {
    print("12");
  }

  method3() {
    print("12");
  }
}

void main() {
  var b = ClassB();
  b.method1();
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畦娄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弊仪,更是在濱河造成了極大的恐慌熙卡,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件励饵,死亡現(xiàn)場離奇詭異驳癌,居然都是意外死亡,警方通過查閱死者的電腦和手機役听,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門颓鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人典予,你說我怎么就攤上這事甜滨。” “怎么了瘤袖?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵衣摩,是天一觀的道長。 經(jīng)常有香客問我捂敌,道長艾扮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任占婉,我火速辦了婚禮泡嘴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逆济。我一直安慰自己酌予,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布奖慌。 她就那樣靜靜地躺著霎终,像睡著了一般。 火紅的嫁衣襯著肌膚如雪升薯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天击困,我揣著相機與錄音涎劈,去河邊找鬼广凸。 笑死,一個胖子當(dāng)著我的面吹牛蛛枚,可吹牛的內(nèi)容都是我干的谅海。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蹦浦,長吁一口氣:“原來是場噩夢啊……” “哼扭吁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盲镶,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侥袜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溉贿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫吧,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年宇色,在試婚紗的時候發(fā)現(xiàn)自己被綠了九杂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡宣蠕,死狀恐怖例隆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抢蚀,我是刑警寧澤镀层,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站思币,受9級特大地震影響鹿响,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谷饿,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一惶我、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧博投,春花似錦绸贡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虑绵,卻和暖如春尿瞭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翅睛。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工声搁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留黑竞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓疏旨,卻偏偏與公主長得像很魂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檐涝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 關(guān)窗熱遏匆,開窗嗆,我該怎么辦?_?? 想念21度的小城了╯^╰
    a04d8498ab45閱讀 126評論 0 0
  • 10 條方法論:(自己的實踐總結(jié)) 1. 朋友圈四件套: 1.1 頭像:要專業(yè)谁榜,給人以好感 1.2 個人標(biāo)簽:強調(diào)...
    EF202102閱讀 587評論 0 0
  • 相同的婚姻幅聘,不同的命運 有這樣兩對夫妻,第一對夫妻要生小孩惰爬,孕婦是一個高齡產(chǎn)婦喊暖,同時有這高血壓。男的不想要這個小孩...
    雨蒙_0771閱讀 177評論 0 0
  • 貌似又漏更一天撕瞧。 菠蘿派很成功陵叽,孩子說比麥當(dāng)勞的好吃;菠蘿切的比較大塊丛版,并且沒有放玉米淀粉巩掺,一口下去酸甜都很濃郁。...
    xiangyier閱讀 144評論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)页畦、焦點胖替、注意力、語言聯(lián)想豫缨、情景聯(lián)想 觀點: 1.統(tǒng)計學(xué)現(xiàn)在叫數(shù)據(jù)分析独令,社會...
    Jenaral閱讀 5,721評論 0 5