Dart类
一、构造函数
1.默认构造函数
如果不声明构造函数,将为您提供默认构造函数。默认构造函数没有参数,并调用超类中的无参数构造函数
dart不支持重载构造函数,只能有一个构造函数,可以带参数也可以不带参数

2.非默认构造函数不继承
子类不会从其超类继承构造函数。声明没有构造函数的子类只有默认(没有参数,没有名称)构造函数。
3.this
main() {
Point p= new Point(, );
print(p.x);
}
class Point {
num x;
num y;
//构造函数可以没有方法体,并且this可以直接在传参时直接对实例赋值
Point(this.x, this.y);
}
或也可以写成大多数语言通用的方式
Point(x, y) {
this.x = x;
this.y = y;
}
4.命名构造函数
可以使用自定义的方式命名构造函数
main() {
Point p= new Point.test(, );
print(p.x);
}
class Point {
num x;
num y;
Point.test(this.x, this.y);
Point.test2(this.x, this.y);
}
5.调用非默认超类构造函数
如果父类是带参数的构造或者命名函数,子类需要手动调用父类的构造函数
main() {
A p = A(, );
print(p.x);
}
class Point {
num x;
num y;
Point(this.x){print('class:Point');}
}
class A extends Point {
num x;
num y;
num z;
A(this.x, this.y) : super(x) {print('class:A');}
}
执行时,会先调用父类的构造

命名构造函数同理
main() {
A p = A(, , );
print(p.x);
}
class Point {
num x;
num y;
Point.test1(this.x) {
print('class:Point1');
}
Point.test2(this.x, this.y) {
print('class:Point2');
}
}
class A extends Point {
num x;
num y;
num z;
A(this.x, this.y, this.z) : super.test2(x, y) {
print('class:A');
}
}

6.实例化可以省略new关键字
Point p = Point(, );
7.初始化程序列表
main() {
var list=[,];
Point(list);
}
class Point {
num x;
num y;
Point(List list)
: x = list[],
y = list[] {
print(y);
}
}
8.重定向构造函数
main() {
Point(,);
}
class Point {
num x, y;
Point(this.x, this.y){print(x);}
//重定向构造函数不能带花括号和内容,
Point.alongXAxis(num x) : this(x, );
}
9.常量构造函数
如果类生成的对象不会改变,可以使这些对象成为编译时常量
main() {
Point(, );
}
class Point {
static final Point a = const Point(, );
final num x, y;
const Point(this.x, this.y);
}
10.工厂构造函数
xxx
二、方法和变量
1.get set
void main() {
Point p = new Point();
p.setX = ;
print(p.getX);
}
class Point {
num _x;
set setX(num value) {
_x = value;
}
String get getX {
return 'x is ${_x}';
}
}
2.简写
void main() {
Point p = new Point();
p.setX = ;
print(p.getX);
}
class Point {
num _x;
set setX(num value)=>_x=value;
String get getX=>'x is ${_x}';
}
3.私有属性和方法
在属性和方法名的开头使用下划线_ 来表示他是私有的。不能被该类以外访问
Dart中没有访问控制符,无论类还是方法默认都是public
4.静态方法
main() {
A.Test();
}
class A{
static Test(){
}
}
5.静态变量
class A {
//不能改变的值
static const int i1 = ;
//因为是静态所以没法在构造函数中赋值,所以和const效果一样??
final int i2=;
//静态变量
static var i3 = ;
}
5.扩展方法
dart2.7新增功能
main(){
List list =new List();
list.test();
}
//给list类添加一个test方法
extension list on List {
test() {
print("abc");
}
}
三、接口
1.dart里没有interface关键字,所有的类默认都能被implement。
被implements 必须实现父类的非静态所有方法和所有属性。
class A {
int j;
m() {}
}
class B implements A {
@override
int j;
@override
m() {
return null;
}
}
2.静态属性和方法不需要实现
class A {
static int j;
static m() {}
}
class B implements A {}
3.和JAVA一样可以有多个实现
class B implements A1,A2 {}
四、继承
1.和java一样只能是单继承
class A {
int i;
m() {
print('A');
}
}
class B extends A {
m() {
super.m();
}
}
2.重写
class A {
int i;
m() {
print('A');
}
}
class B extends A {
//重写方法
@override
m() {
print('B');
}
}
五、抽象
抽象类无法被实例化。
abstract class A {
int i;
m() {
print('A');
}
}
六、mixins&with&on
Mixins 是在多个类层次结构中重用类代码的一种方式
个人感觉是因为dart不能多继承,而又不想让父类能实力化,并且能直接不需要重写使用父类的方法的情况下出现的新类型
main() {
B b= B();
b.Sound();
}
mixin Extra1 {
Sound() {
print('Extra1');
}
}
mixin Extra2 {
Sound() {
print('Extra2');
}
}
class A {
Sound() {
print('A');
}
}
class B extends A with Extra1, Extra2 {
Sound() {
print('B');
}
}
如果其中方法有重名他的优先级顺序为
本类》mixin Extra2》mixin Extra1 》Class B
七、重写操作符
两个点对象相加
class Point {
num x;
num y;
Point(this.x, this.y);
Point operator +(Point p) {
return Point(x + p.x, y + p.y);
}
print1(){
print('x:$x,y:$y');
}
}
void main() {
Point p1 = new Point(, );
Point p2 = new Point(, );
(p1 + p2).print1();
}
Dart类的更多相关文章
- json转换成dart类 JSON to Dart
json_to_dart的使用 如果我们得到一个特别复杂的JSON,有时候会无从下手开始写Model,这时候就可以使用一些辅助工具.我认为json_to_dart是比较好用的一个.它可以直接把json ...
- dart系列之:dart类中的构造函数
目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中所有 ...
- dart系列之:dart类的扩展
目录 简介 使用extends 抽象类和接口 mixins 总结 简介 虽然dart中的类只能有一个父类,也就是单继承的,但是dart提供了mixin语法来绕过这样限制. 今天,和大家一起来探讨一下d ...
- dart类详细讲解
dart 是一个面向对象的语言;面向对象有 (1)继承 (2)封装 (3)多态 dart的所有东西都是对象,所有的对象都是继承与object类 一个类通常是由属性和方法组成的哈: 在dart中如果你要 ...
- dart系列之:dart类中的泛型
目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在集合 ...
- 从零学习Flutter(一):初识Dart
Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一 ...
- Dart 语言了解
Dart 语言了解 概念 当您了解Dart语言时,请记住以下事实和概念: 您可以放在变量中的所有内容都是一个对象,每个对象都是一个类的实例.偶数,函数和 null对象.所有对象都从Object类继承. ...
- Dart:2.通过一个简单程序来理解Dart基础语法
一 . 一个简单的 Dart 程序 // 这是程序执行的入口. main() { var number = 42; // 定义并初始化一个变量. printNumber(number); // 调用一 ...
- Dart 和 Flutter 使用json_annotation和json_serializable来处理json数据教程
在学习fultter的时候突然想到如何去处理从服务器获取的json或者将app中的对象数据转换成json上传给服务器 于是研究一下dart对json数据的处理 首先需要依赖下面的第三方库(这里要强调下 ...
随机推荐
- Dubbo 的 Helloworld
前提条件 安装好了 ZooKeeper 作为注册中心 服务端 <?xml version="1.0" encoding="UTF-8"?> < ...
- 【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法
题目描述 B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 输入 一行三个整数 b;d;n 输出 一行一个数表示模 7528443412579576937 ...
- 【bzoj1878】[SDOI2009]HH的项链 树状数组
题目描述 HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一 ...
- 【bzoj4236】JOIOJI STL-map
题目描述 JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由“J.O.I” ...
- 【题解】SDOI2009学校食堂
不知道有没有人跟我有一样的感觉……实际上很多的状压DP都不难,然而调到心碎……这题题面看起来很长,还有混合的‘位运算’来吓唬人(实际上就是异或而已).但实际上只要仔细阅读,发现也是一道水水的裸题. 首 ...
- [HDU5956]The Elder
题面在这里 题意 一个王国中的所有城市构成了一棵有根树,其根节点为首都,编号为1 树有边权,城市的记者每次向祖先移动\(d\)的路程需要的代价为\(d^2\), 如果祖先不是根还需要加上\(p\),求 ...
- 菜单 & 工具栏 & 状态栏
MFC中ON_UPDATE_COMMAND_UI和ON_COMMAND消息区别 CCmdUI 加载状态栏 加载工具栏
- Wpremig和Jhadgre的藏宝图(最大流+二分)
Wpremig和Jhadgre的藏宝图 题目链接:https://ac.nowcoder.com/acm/contest/333/M Description: Jhadgre在生日那天收到了一张神秘的 ...
- centos的网络设置问题
遭遇了多次centos的网络连接问题,现将正确配置总结下: 这里是使用vmware虚拟平台,因为涉及到中间这层,所以需要设置下: 保证centos也能连上网,首先物理机连上网,接着物理机的vmware ...
- shell编程---变量赋值
echo $filen | awk -F. '{print $3}' 怎么把上边这行脚本产生的字串赋给一个变量啊,实际上会产生一个数, 这个变量用来存这个数.格式应该是怎么写的? a=`echo $ ...