1.關(guān)鍵字解析
- extends:繼承Class
- with:混入Class
- implements:實(shí)現(xiàn)Class
這三種關(guān)系可以同時(shí)存在,但是有前后順序:
extends - with- implements
extens在前,with在中間,implements最后
2.繼承(extends)
Flutter中的繼承和Java中的繼承是一樣的:
Flutter中的繼承是單繼承,只能繼承一個(gè)Class,不能是多個(gè),繼承后子類重寫或者調(diào)用父類的方法,也可以獲取父類的屬性等,在Java中只能是公開的,但Dart里面不存在公開跟私有屬性,Dart里面一般而言如果是以下橫線”_“開頭的我們就把他認(rèn)作是私有的,但是依舊是可以調(diào)用的
class A {
a1() {
_aa();
}
_aa() {}
}
class B {
b1() {}
}
class C {
c1() {}
}
class S extends A {
@override
a1() {
return super.a1();
}
}
class SS {
ss() {
S().a1();
S()._aa();
}
}
3.with(混入)
- 混合的對(duì)象是類
- 可以混合多個(gè)
如果A類混入了B類,那么A就可以直接調(diào)用B里面的方法,且不需要實(shí)例化B,不需要B做單例,也不需要靜態(tài)被調(diào)用的方法,還能混入多個(gè)類,這對(duì)方法復(fù)用帶來(lái)的極大的便利性,破除了眾多限制
class A {
a1() {
_aa();
}
_aa() {}
}
class B {
b1() {}
}
class B2 {
b2() {}
}
class S extends A with B, B2 {
@override
a1() {
return super.a1();
}
@override
b1() {
return super.b1();
}
}
class SS {
ss() {
S().a1();
S()._aa();
S().b1();
S().b2();
}
}
4.implements(實(shí)現(xiàn))
這個(gè)跟Java中基本沒(méi)有區(qū)別,需要注意的就是Dart中是沒(méi)有接口這一說(shuō)的,實(shí)現(xiàn)的也是Class
class A {
a1() {
_aa();
}
_aa() {}
}
class B {
b1() {}
}
class B2 {
b2() {}
}
class C1 {
c1() {}
}
class C2 {
c2() {}
}
class S extends A with B, B2 implements C1, C2 {
@override
a1() {
return super.a1();
}
@override
b1() {
return super.b1();
}
@override
b2() {
return super.b2();
}
@override
c1() {
}
@override
c2() {
}
}
class SS {
ss() {
S().a1();
S()._aa();
S().b1();
S().b2();
S().c1();
S().c2();
}
}