Dart面向對象編程(一)

類與對象

  • 使用關鍵字class聲明一個類
  • 使用關鍵字new建立一個對象,new能夠省略
  • 全部對象都繼承Object類

屬性與方法

  • 屬性默認會生成setter和getter方法
  • 使用final聲明的屬性,只有getter方法
  • 屬性和方法經過.來訪問
  • 方法不能被重載 【與java區別,後面會提到mixins多繼承也與java不一樣】
  • 使用_修飾的類,屬性與方法爲私有方法,做用域爲當前library(庫)
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;

  //箭頭函數以及插值表達式
  work() => print("name is \$name,age is \$age,he is worker");
//報錯不能重載
//  work(String work){
//
//  }
}
複製代碼

計算屬性

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;

  //計算屬性
  num get area {
    return width * height;
  }

  set area(value) {
    width = value / 20;
  }

  //面積方法
  getArea() => width * height;
}

複製代碼

構造方法

  • 沒有定義構造方法,默認會生成一個
  • 存在自定義構造方法,則默認構造方法無效
  • 構造方法不能重載
void main(){
  var p = Person("yxjie", 28, "your heart");

  var p2 =Person.withAddress("你的肺");
}

class Person{;
  String name;

  int age;

  final String address;//只能經過語法糖方式賦值

//  Person(String name,int age){
//    this.name=name;
//    this.age=age;
//  }

  //與上面等價
  Person(this.name,this.age,this.address);
  //定義多個構造方法
  Person.withAddress(this.address);
}
複製代碼

常量構造方法

void main(){
  var p = Person("Jerry", 16);
//  p.name="hhah";//報錯
}
class Person{
  final String name;
  final int age;
  const Person(this.name,this.age);
}
複製代碼

####工廠構造方法java

class AndroidUtil{

  final String name;

  //工廠構造方法 特色返回一個對象實列
  factory AndroidUtil(String name){
    return AndroidUtil._innerConstruct(name);
  }

  AndroidUtil._innerConstruct(this.name);

}
複製代碼

初始化列表

  • 初始化列表會在構造方法體執行以前執行
  • 使用逗號分隔初始化表達式
  • 經常使用語設置final變量的值
//初始化列表方式賦值
  Person.withMap(map) : address = map["address"] {
    this.name = map['name'];
    this.age = map["age"];
  }
複製代碼

靜態成員

  • 使用關鍵字static實現類級別的變量和函數
  • 靜態成員不能夠訪問非靜態成員,非靜態成員能夠訪問靜態成員
  • 類中常量須要使用 static const 修飾(java中用static final修飾)

####對象操做符bash

  • 條件運算符?.(與Kotlin同樣)
  • 類型轉換 as (與Kotlin同樣)
  • 是否制定類型:is is!
  • 級聯操做..
void main() {
  var person;
  person?.work(); //不會運行
  var p;
  p = "";
  p = Person();
  (p as Person).work();
  
  if(p is Person){
    p.work();
  }
//級聯操做
  var p1 = Person();
  p1
    ..name = "jerry"
    ..age = 16;
}
class Person {
  work() => print("work ...");
}
複製代碼

對象call方法

Dart中對象call方法相似於java中toString方法,區別在於Dart中call方法直接調用對象實列就行,java須要對象.toString()函數

相關文章
相關標籤/搜索