flutter的with、implements、extends区别
1.首先从flutter的三种类型定义讲起:class(类)、abstract class(抽象类)、 Mixin(混入)
dart里面没有接口的类型,同时也是单继承语言。class和abstract class与java中的差不多,这里不多说,重点讲一下Mixin。编写成mixin的类,能很好的对代码进行复用,也能让dart实现“伪多重继承”,同时又不会造成多重继承导致的 菱形问题
2.dart的with、implements、extends
extends:能重写父类属性或者方法,同时能通过super引用父类field
implements:必须重写所有属性和方法,且无法调用父类field
with:无需super关键字能直接调用父类方法或者属性
3.例子对比
void main() {
Vector vector = Vector();
Vector2 vector2 = Vector2();
Vector3 vector3 = Vector3();
vector.paint();
vector2.paint();
vector3.paint();
}
class Painter {
int line = 0;
paint() {
print('$line');
}
}
class Vector extends Painter {
@override
int get line => super.line + 1;
@override
paint() {
print("$line");
}
}
class Vector2 implements Painter {
@override
int line;
@override
paint() {
print("$line");
}
}
class Vector3 with Painter {}
3.控制台输出
图1
4.dart中尝试菱形伪继承
提示:The class ‘Vector3’ can’t be used as a mixin because it references 'super’
图2
5.结论
从图1的控制台输出可以看出继承能重写field并引用父类field,实现implements则无法使用super获取父类属性,只能重写,混入能直接复用父类所有属性和方法。
ReganYue: 前排支持一下,可以的话来我博客看看吧
gmac0q: 真不错,运行star运行
大家一起学编程(python): 看君一篇文,少填10个坑
彼 方: 好文,收藏学习了
看,月亮在跳舞: 博主写的好好,一起加油吖