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 {}
4.控制台输出
5.dart中尝试菱形伪继承
提示:The class ‘Vector3’ can’t be used as a mixin because it references 'super’
6.结论
从图1的控制台输出可以看出继承能重写field并引用父类field,实现implements则无法使用super获取父类属性,只能重写,混入能直接复用父类所有属性和方法。
CSDN-Ada助手: 不知道 MySQL入门 技能树是否可以帮到你:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql
MixLin0423: physics: const NeverScrollableScrollPhysics(),是一个好方法,但是如果SingleChildScrollView里面的内容超出了,就不显示了,所以还是没解决
djh512518: wx.connectSocket始终链接不上,是必须要正式服务器的地址吗,本地开发环境的地址不能使用?
普通网友: 写的真好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
小小只123: 感谢大佬分享好文,学到了不少新知识,支持大佬,期待大佬持续输出优质文章!