類與對(duì)象
- 使用關(guān)鍵字class聲明一個(gè)類
- 使用關(guān)鍵字new創(chuàng)建一個(gè)對(duì)象,new可以省略
- 所有對(duì)象都繼承Object類
屬性與方法
- 屬性默認(rèn)會(huì)生成setter和getter方法
- 使用final聲明的屬性蜓耻,只有g(shù)etter方法
- 屬性和方法通過.來訪問
- 方法不能被重載 【與java區(qū)別蜜宪,后面會(huì)提到mixins多繼承也與java不同】
- 使用_修飾的類锭硼,屬性與方法為私有方法预柒,作用域?yàn)楫?dāng)前l(fā)ibrary(庫(kù))
void main() {
var p = Person();
p.name = "Tom";
p.age = 22;
p.work(); //name is Tom,age is 22,he is worker
}
class Person {
String name;
int age;
//箭頭函數(shù)以及插值表達(dá)式
work() => print("name is \$name,age is \$age,he is worker");
//報(bào)錯(cuò)不能重載
// work(String work){
//
// }
}
計(jì)算屬性
void main() {
var rect = Rect();
rect.width = 20;
rect.height = 10;
print(rect.area); //200
rect.area=300;
print(rect.width);//15
}
class Rect {
num width, height;
//計(jì)算屬性
num get area {
return width * height;
}
set area(value) {
width = value / 20;
}
//面積方法
getArea() => width * height;
}
構(gòu)造方法
- 沒有定義構(gòu)造方法,默認(rèn)會(huì)生成一個(gè)
- 存在自定義構(gòu)造方法喳资,則默認(rèn)構(gòu)造方法無效
- 構(gòu)造方法不能重載
void main(){
var p = Person("yxjie", 28, "your heart");
var p2 =Person.withAddress("你的肺");
}
class Person{;
String name;
int age;
final String address;//只能通過語(yǔ)法糖方式賦值
// Person(String name,int age){
// this.name=name;
// this.age=age;
// }
//與上面等價(jià)
Person(this.name,this.age,this.address);
//定義多個(gè)構(gòu)造方法
Person.withAddress(this.address);
}
常量構(gòu)造方法
void main(){
var p = Person("Jerry", 16);
// p.name="hhah";//報(bào)錯(cuò)
}
class Person{
final String name;
final int age;
const Person(this.name,this.age);
}
工廠構(gòu)造方法
class AndroidUtil{
final String name;
//工廠構(gòu)造方法 特點(diǎn)返回一個(gè)對(duì)象實(shí)列
factory AndroidUtil(String name){
return AndroidUtil._innerConstruct(name);
}
AndroidUtil._innerConstruct(this.name);
}
初始化列表
- 初始化列表會(huì)在構(gòu)造方法體執(zhí)行之前執(zhí)行
- 使用逗號(hào)分隔初始化表達(dá)式
- 常用語(yǔ)設(shè)置final變量的值
//初始化列表方式賦值
Person.withMap(map) : address = map["address"] {
this.name = map['name'];
this.age = map["age"];
}
靜態(tài)成員
- 使用關(guān)鍵字static實(shí)現(xiàn)類級(jí)別的變量和函數(shù)
- 靜態(tài)成員不可以訪問非靜態(tài)成員觉吭,非靜態(tài)成員可以訪問靜態(tài)成員
- 類中常量需要使用 static const 修飾(java中用static final修飾)
對(duì)象操作符
- 條件運(yùn)算符?.(與Kotlin一樣)
- 類型轉(zhuǎn)換 as (與Kotlin一樣)
- 是否制定類型:is is!
- 級(jí)聯(lián)操作..
void main() {
var person;
person?.work(); //不會(huì)運(yùn)行
var p;
p = "";
p = Person();
(p as Person).work();
if(p is Person){
p.work();
}
//級(jí)聯(lián)操作
var p1 = Person();
p1
..name = "jerry"
..age = 16;
}
class Person {
work() => print("work ...");
}
對(duì)象call方法
Dart中對(duì)象call方法類似于java中toString方法骨饿,區(qū)別在于Dart中call方法直接調(diào)用對(duì)象實(shí)列就行亏栈,java需要對(duì)象.toString()