Dart中一切皆爲對象,而每一個對象都是一個類的實例,全部的類都繼承於Object。編程
除了普通的構造方法,Dart中的Class還提供了不一樣用途的構造方法,好比命名構造方法、重定向構造方法、常量構造方法、工廠構造方法,還有初始化參數列表等。bash
抽象類使用abstract關鍵字定義,是不能被實例化的,一般用來定義接口以及部分實現。 但與其餘語言不太同樣的地方是,抽象方法也能夠定義在非抽象類中。編程語言
每一個類的內部都隱式的定義了一個接口,這個接口包含類的成員的全部實例,以及類實現的全部接口。 若是你想讓A類支持B類全部的API,而且不經過繼承B類來實現,那麼A類應該實現B接口。 一個類能夠實現一個或多個接口,經過implements關鍵字。ide
Dart語言集合了現代編程語言的衆多優勢,Mixin繼承機制也是其一。具體的讀法應該叫作 mix in,翻譯下就是混入。ui
mixins
是一種實現多重繼承的方式,經過它能夠給現有的類添加特性。spa
在with
關鍵字後面能夠跟隨一個或多個mixin
的名稱。以下所示:翻譯
class Musician extends Performer with Musical {
// ···
}
class Maestro extends Person
with Musical, Aggressive, Demented {
Maestro(String maestroName) {
name = maestroName;
canConduct = true;
}
}
複製代碼
想要實現一個mixin,你能夠建立一個繼承自Object的、沒有構造器的類。code
若是你不想讓mixin類能夠當作普通class同樣使用的話,就是用mixin關鍵字替換class關鍵字。 換句話說,mixin也可使用class關鍵字定義(也能夠是抽象類),也能夠當作普通class同樣使用。orm
mixin Musical {
bool canPlayPiano = false;
bool canCompose = false;
bool canConduct = false;
void entertainMe() {
if (canPlayPiano) {
print('Playing piano');
} else if (canConduct) {
print('Waving hands');
} else {
print('Humming to self');
}
}
}
複製代碼
使用on
關鍵字能夠指定mixin的父類,對象
mixin MusicalPerformer on Musician {
// ···
}
複製代碼
注意:對mixin關鍵字的支持是在Dart 2.1 版本引入的,早期的版本使用`abstract class`來代替的。
複製代碼
mixin也可使用class關鍵字定義,也能夠當作普通class同樣使用。 mixin可使用with定義,這樣定義的mixin就只能經過with關鍵字引用了。
Dart是沒有interface這種東西的,但並不意味着這門語言沒有接口,事實上,Dart任何一個類都是接口,你能夠實現任何一個類,只須要重寫那個類裏面的全部具體方法。
因此說,一個普通類class,便是普通類,也是接口,也能夠當作mixin來使用。
參考: