1.关键字解析
- extends:继承Class
- with:混入Class
- implements:实现Class
这三种关系可以同时存在,但是有前后顺序:
extends - with- implements
extens在前,with在中间,implements最后
2.继承(extends)
Flutter中的继承和Java中的继承是一样的:
Flutter中的继承是单继承,只能继承一个Class,不能是多个,继承后子类重写或者调用父类的方法,也可以获取父类的属性等,在Java中只能是公开的,但Dart里面不存在公开跟私有属性,Dart里面一般而言如果是以下横线”_“开头的我们就把他认作是私有的,但是依旧是可以调用的
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(混入)
- 混合的对象是类
- 可以混合多个
如果A类混入了B类,那么A就可以直接调用B里面的方法,且不需要实例化B,不需要B做单例,也不需要静态被调用的方法,还能混入多个类,这对方法复用带来的极大的便利性,破除了众多限制
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(实现)
这个跟Java中基本没有区别,需要注意的就是Dart中是没有接口这一说的,实现的也是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();
}
}