声明类 ( 同 JS )
class Person{
String name = "zhangsan",
void getInfo(){}
}
var person = new Person()
默认构造函数
形式同 JS 的 Contructor
class Person{
Person(){
// new Person 的时候会立即调用该方法
}
}
命名构造函数
如果在实例化主动调用了命名构造函数,将不会触发默认的构造函数
class Person{
Person.now()
}
var xxx = new Person.now();
单独抽离 class
import "lib/xxx.dart"
私有方法和私有属性
- Dart 中变量前面 “_” 表示私有
- 单独把该类抽离为一个单独文件,私有属性才能生效
getter 和 setter 的用法
当属性和方法带有 get 和 set 属性是 可以直接通过 “.” 操作符访问,无需加入 “()”
class Person{
String name = "";
Person(this.name);
get getName{return this.name};
set setName(val){}this.name = val}
}
main(){
var test = new Person("xxx")
text.getName // 张三
text.setName = "aaa"
}
类的初始化列表
class Person{
String name;
int age;
Person():name="zhangsan",age=18{} // 实例化之前复制
}
类的静态成员
- 使用 static 关键字来实现变量和函数
- 静态方法不能访问非静态,费静态可以访问静态
类中的修饰符
as 强制转换
var P1 = "";
P1 = new Person();
(P1 as Person).xxx(); // 强制将 p1 转为 Person 调用其类中的方法
.. 联机操作符
“.”修饰符的语法糖
var dome = new Dome();
dome..name = "xxx";
..age = 18;
类的继承
- 子类使用 extends 继承父类
- 子类继承父类课件的属性和方法,构造函数除外
- 子类可复用父类的 get 和 set
- super 关键字,用于子类给父类的构造函数传参
child():super(xxx,xxx){}
child:super.xxx(xx,xx){}
- 在复写父类方法时加上 @override方法
抽象类
用于定义标准,子类可以继承抽象类也可以实现
- 通过 abstract 关键字定义抽象类
- 不能被实例化,只有继承他的子类可以
- 如果抽象类有抽象方法,必须在子类中实现
接口
- 使用 implements 关键字进行定义
abstract Dome Interfact{
add()
}
class Xxx implements Interfact,xxx{ // 用逗号间隔可以定义多个接口类型
}
混入 Mixins
Dart中不允许多个继承, Mixins 实现类似的多继承
- mixins 的类型不能有构造函数
- 一个类可以多个 mixins 类
- mixins 不是继承,也不是接口
- 多个 mixins 中使用时 后者会替换前者的同名方法
class A{}
class B{}
class C with A,B{} // 此时的 C 已经有了 A 和 B 的方法和属性