Dart和Java一樣只支持單繼承。而且Dart中沒有和Java一樣提供Interface字段去聲明一個(gè)接口,但是也有抽象類。
如果想使用和Java接口一樣的功能可以使用Mixins和implements兩種方式,分別解釋下兩種方式:
- Mixins : 指能夠?qū)⒘硪粋€(gè)或多個(gè)類的功能添加到您自己的類中成艘,而無需繼承這些類。
- implements : 將一個(gè)類作為接口使用
class A {
void a() {
print('fun a => by a');
}
}
class B implements A {
@override
void a() {
print('fun a => by b');
}
}
class C {
void a() {
print('fun a => by c');
}
void c() {
print('fun c => by c');
}
void s(){
print('fun s => by c');
}
}
class E {
String e = 'eeee';
void s(){
print('fun s => by e');
}
}
class D extends A with C, E {
void c() {
print('fun c => by d');
}
}
void main() {
D d = new D();
d.a();
d.s();
d.c();
}
============ output ============
fun a => by c
fun s => by e
fun c => by d
首先看B implements A
贺归,所以此時(shí)A
相對(duì)于B
來說就是一個(gè)接口淆两,所以他要實(shí)現(xiàn)B
中的方法。換句話說拂酣,Dart每個(gè)類都是接口
然后看D extends A with C
,D
繼承于A
,由于單繼承特性秋冰,這個(gè)時(shí)候D
不能再使用extends
關(guān)鍵字繼承其他類,但是可以使用with
關(guān)鍵字折疊其他類以實(shí)現(xiàn)代碼重用婶熬。當(dāng)屬性和方法重復(fù)時(shí)剑勾,以當(dāng)前類為準(zhǔn)。赵颅,比如以上例子就是 A => C => E => D 甥材。