with的优先级比extends高,同时使用with和extends时,默认会继承with后面最后一个类里面的方法。
只使用implements时必须重写父类里面的所有方法。
void main(List<String> arguments) {
var aa = A.cs();
var a = A();
}
class A extends B with C implements C {
//命名构造函数
A.cs() {
print('a类构造函数');
}
//构造函数
A() {
///如果a类有b方法就会调用a类的b方法,
///如果没有就会调用父类的b方法,
///with的优先级比extends高。
///先查看with的类是否有b方法,
///然后再查看extends里面的类是否有b方法。
b();
this.b();
///他会先调用他父类的b方法,
///with的优先级比extends高。
///先查看with的类是否有b方法,
///然后再查看extends里面的类是否有b方法。
///
/// 如果父类没有才调用a类的b方法。
super.b();
}
b() {
print('这是a类里面的b类');
}
}
class B {
b() {
print('这是b类b方法');
}
}
class C {
b() {
print('这是c类b方法');
}
}
输出结果:
D:/flutter_sdk/flutter/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\90649\Desktop\classdart\bin\classdart.dart
a类构造函数
这是a类里面的b类
这是a类里面的b类
这是c类b方法
进程已结束,退出代码0
THE END