Flutter - Dart語法基礎(chǔ)及mixin

一文了解Dart語法

我了解Dart語法就是參照上面鏈接文章

重點(diǎn)理解mixin

mixin,翻譯過來就是混入,個(gè)人理解是可以在原來類的基礎(chǔ)上插入新的類的方法及實(shí)現(xiàn),原來的類可以直接調(diào)用mixin類的方法

場(chǎng)景:


java里面的實(shí)現(xiàn)如下:

interface CanFixComputer { void fixComputer();}

?interface CanDesignSoftware { void designSoftware();}?

?//軟件工程師

?class SoftwareEngineer extends Engineer implements CanFixComputer, CanDesignSoftware {?

?????@Override public void fixComputer() { System.out.println("修電腦"); ?}?

?????@Override public void designSoftware() { System.out.println("設(shè)計(jì)軟件"); }?

}

?//IT教師class ITTeacher extends Teacher implements CanFixComputer {?

?????@Override public void fixComputer() { System.out.println("修電腦"); }?

}

dart里面的實(shí)現(xiàn)如下:

abstract class CanFixComputer { void fixComputer();}?

?abstract class CanDesignSoftware { void designSoftware();}

//軟件工程師?

class SoftwareEngineer extends Engineer implements CanFixComputer, CanDesignSoftware {

????void fixComputer() { print('修電腦'); }

????void designSoftware() { print('設(shè)計(jì)軟件'); }

}

//IT教師

class ITTeacher extends Teacher implements CanFixComputer {

????void fixComputer() { print('修電腦'); }

}

還是上面的例子,在Dart里面,如果運(yùn)用Mixin思想的呈現(xiàn):

abstract class CanFixComputer {

?????factory CanFixComputer._() { return null; }?

?????void fixComputer() { print('修電腦'); }?

}?

?abstract class CanDesignSoftware {?

?????factory CanDesignSoftware._() { return null; }?

?????void designSoftware() { print('設(shè)計(jì)軟件'); }?

}

//軟件工程師

class SoftwareEngineer extends Engineer with CanFixComputer, CanDesignSoftware {}?

?//IT教師?

class ITTeacher extends Teacher with CanFixComputer {}

使用情況:

ITTeacher itTeacher = new ITTeacher();?

?itTeacher.doWork();

?itTeacher.fixComputer();?

SoftwareEngineer softwareEngineer = new SoftwareEngineer();

softwareEngineer.doWork();?

?softwareEngineer.fixComputer();

?softwareEngineer.designSoftware();

這里關(guān)鍵字從?implements 變成了 with,而且,每個(gè)具有某項(xiàng)特性的類不再需要具體去實(shí)現(xiàn)同樣的功能,Dart的Mixin機(jī)制就比Java的接口會(huì)高效,開發(fā)上層的只需要關(guān)心當(dāng)前需要什么特性,而開發(fā)功能模塊的關(guān)心具體要實(shí)現(xiàn)什么功能

extends,with,implements?順序的理解

class First {?

?????void doPrint() { print('First'); }

?}?

?class Second {?

?????void doPrint() { print('Second'); }?

}

?class Father {?

?????void doPrint() { print('Father'); }?

}????

?class Son1 extends Father with First,Second {

?}

?class Son2 extends Father with First implements Second {

?}

class Son3 extends Father with First implements Second {

? ??void doPrint() { print('Son'); }

}

?main() {

?Son1 son1 = new Son1();

?son1.doPrint();?

?Son2 son2 = new Son2();?

?son2.doPrint();?

?Son3 son3 = new Son3();??son3.doPrint();?

}

控制臺(tái)輸出:

Second?

First

Son

implements 只說要實(shí)現(xiàn)某個(gè)方法,自身不負(fù)責(zé)實(shí)現(xiàn)

所以可以看出,優(yōu)先級(jí):在自身類的實(shí)現(xiàn) >mixin(如果存在沖突,后面的覆蓋前面的)>父類


多重繼承

當(dāng)只使用mixin時(shí),mixin類的聲明最好使用mixin關(guān)鍵字

mixin First on Father {

? ? ?void doPrint() { print('Father'); }

?} ? ?

當(dāng)使用on關(guān)鍵字,自身不能作為父接口,表示該mixin只能在它的子類使用?

class Son extends Father with First {

}


多重繼承場(chǎng)景:

mixin First on Father {

? ? void init() {

? ? ? ? print('First init');

? ? ? ? super.init();

? ? ? ? print('First end');

????}

}

mixin Second on Father {

? ? void init() {

? ? ? ? print('Second init');

? ? ? ? super.init();

? ? ? ? print('Second end');

????}

}

class Father {

? ? void init() {

? ? ? ? print('Father init');

????}

????Father() {?

?????????init();

????}?

}

class Son extends Father with First,Second {

? ? @override

? ? void init() {

? ? ? ? print('Son init');

? ? ? ? super.init();

? ? ? ? print('Son end');

? ? }

}

控制臺(tái)輸出:

Son init

Second init

First init

Father init

First end

Second end

Son end


學(xué)習(xí)參考鏈接:kevinWu的博客

OVER,THANKS

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容