Dart 語法(二)

類和對象

  • 使用class關(guān)鍵字聲明
  • 使用new菊霜、構(gòu)造函數(shù)創(chuàng)建一個(gè)對象
  • 所有對象繼承自Object
  • Dart中默認(rèn)生成settergetter
  • 屬性和方法通過.訪問
  • final修飾的屬性必須定義初始值,不能被修改
  • 對象方法是不能重載的
  • 屬性宁赤、方法名前面添加_變成私有
void main() {
  LGPerson person = LGPerson();
  person.name = 'flutter';
  person.run();
}

class LGPerson{
  final String city = '長沙';
  String? name;
  int? age;

  void run() {
    print('name:$name age:$age');
  }
}

構(gòu)造函數(shù)

  • 默認(rèn)構(gòu)造函數(shù)是()
  • 可以通過this進(jìn)行賦值
  • 構(gòu)造方法中不能return惊畏,除非在前面添加factory修飾構(gòu)造方法
  • 使用const修飾構(gòu)造函數(shù)恶耽,就變成常量對象
  • 當(dāng)一個(gè)對象所有成員屬性都是final修飾時(shí),該對象可以被創(chuàng)建為常量對象
void main() {
  // LGPerson person = LGPerson();
  LGPerson person = LGPerson(18,180,'flutter');
  LGPerson person1 = LGPerson.whitName('oc',180);

}

class LGPerson{
  String _name = 'swift';
  int? age;
  final height;

  LGPerson(this.age, this.height,this._name);
  //命名構(gòu)造函數(shù)
  LGPerson.whitName(this._name,this.height);

  void run() {
    print('name:$name age:$age');
  }
}

單例對象

class FactoryClass {
  static FactoryClass? _instace;

  // factory FactoryClass(){
  //   if(_instace == null){
  //     _instace = FactoryClass._init();
  //   }
  //   return _instace!;
  // }

  // factory FactoryClass(){
  //   _instace ??= FactoryClass._init();
  //   return _instace!;
  // }

  // factory FactoryClass(){
  //   return  _instace ??= FactoryClass._init();
  // }

  factory FactoryClass() => _instace ??= FactoryClass._init();

  //私有構(gòu)造函數(shù)
  FactoryClass._init();
}

初始化列表

  • 給final變量賦值颜启,在構(gòu)造函數(shù)之前訪問
  • 校驗(yàn)傳遞函數(shù)的值
class Person {
  String name;
  int age;
  final height;

  Person(this.name,this.age,int h)
      : height = h, 
      assert(h > 0),
      assert(age > 0){
      print('h > 0 && age > 0');
  }
}

類方法

  • 使用static修飾偷俭,不能訪問非靜態(tài)成員
void main(){
  Person.age = 10;
  Person.sum(20);
};

class Person {
  //靜態(tài)屬性
  static int age = 1;
  int currentCount = 0;
  //靜態(tài)方法
  static int sum(int a){
    return a + age;
  }

  //實(shí)例方法
  int sum2(int a){
    return a + currentCount + age;
  }
}

對象操作符

  • var修飾動態(tài)類型
  • as強(qiáng)制轉(zhuǎn)換類型,只在使用了as當(dāng)前有效农曲,在哪里調(diào)用社搅,哪里進(jìn)行轉(zhuǎn)換
  • is判斷真實(shí)類型
void main(){
  //動態(tài)類型
  var p1 = Object();
  p1 = Person();
  //強(qiáng)制轉(zhuǎn)化類型
  (p1 as Person).sum2(10);
 
  if(p1 is Person){
    
  }
}

class Person {
  int currentCount = 0;

  int sum2(int a){
    return a + currentCount;
  }
}

繼承

  • Dart是單繼承
  • extends關(guān)鍵字實(shí)現(xiàn)繼承
  • 會繼承父類的默認(rèn)構(gòu)造方法
  • 如果父類含有帶有參數(shù)或者帶有名字的構(gòu)造方法,必須顯性的去實(shí)現(xiàn)其中一個(gè)構(gòu)造方法
void main(){
  Tearch t1 = Tearch();
  t1.currentCount = 10;
  t1.name = 'swift';
  t1.sum2(20);
}

class Person {
  int currentCount = 0;
  String? name;

  int sum2(int a){
    return a + currentCount;
  }
  Person(){
    print('Person -- Person');
  }
  Person.init();
}

class Tearch extends Person{
  Tearch.init() : super.init();
  
  int? age;

  //重寫父類
  @override
  set name(String? _name) {
    // TODO: implement name
    super.name = _name;
  }
}

抽象類

  • 不能被實(shí)例化的類乳规,使用abstract修飾抽象類
  • 子類繼承抽象類形葬,必須重寫抽象類的屬性和方法的實(shí)現(xiàn)
  • implements修飾實(shí)現(xiàn)多個(gè)抽象類
  • 類似OC中的協(xié)議
abstract class Person1 {
  int sum1(int a);
}

abstract class Person2 {
  int sum2(int a);
}

abstract class Person3 {
  String? name;
}

//多實(shí)現(xiàn)抽象類
class Tearch implements Person1,Person2,Person3{

  @override
  int sum1(int a) {
    // TODO: implement sum1
    throw UnimplementedError();
  }

  @override
  int sum2(int a) {
    // TODO: implement sum2
    throw UnimplementedError();
  }

  @override
  set name(String? _name) {
    // TODO: implement name
  }

}

//單繼承抽象類
abstract class Person10 {
  int sum10(int a);
  String? age;
}

class Student extends Person10 {
  @override
  int sum10(int a) {
    // TODO: implement sum10
    throw UnimplementedError();
  }

  @override
  set age(String? _age) {
    // TODO: implement age
    super.age = _age;
  }
}

Mixins混入

  • 實(shí)際上就是多繼承
  • 混入類中不能有構(gòu)造方法
  • 混入類最好不要有繼承
class Person1 {
  int sum1(int a);
}

class Person2 {
  int sum2(int a);
}

class Person3 {
  String? name;
}

//Mixins混入
class Tearch extends Person1 with Person2,Person3{


}

重載操作符operator

  • 類似oc中hash
void main(){
  Student s1 = Student(20);
  Student s2 = Student(30);

  print(s1 > s2);
}

class Student {
  int age;

  Student(this.age);

  bool operator > (Student other) => this.age > other.age;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市暮的,隨后出現(xiàn)的幾起案子笙以,更是在濱河造成了極大的恐慌,老刑警劉巖冻辩,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猖腕,死亡現(xiàn)場離奇詭異拆祈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倘感,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門放坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人老玛,你說我怎么就攤上這事淤年。” “怎么了蜡豹?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵麸粮,是天一觀的道長。 經(jīng)常有香客問我镜廉,道長弄诲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任娇唯,我火速辦了婚禮齐遵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘视乐。我一直安慰自己洛搀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布佑淀。 她就那樣靜靜地躺著留美,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伸刃。 梳的紋絲不亂的頭發(fā)上谎砾,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音捧颅,去河邊找鬼景图。 笑死,一個(gè)胖子當(dāng)著我的面吹牛碉哑,可吹牛的內(nèi)容都是我干的挚币。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扣典,長吁一口氣:“原來是場噩夢啊……” “哼妆毕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贮尖,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤笛粘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薪前,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡润努,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了示括。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺浇。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垛膝,靈堂內(nèi)的尸體忽然破棺而出随抠,到底是詐尸還是另有隱情,我是刑警寧澤繁涂,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站二驰,受9級特大地震影響扔罪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桶雀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一矿酵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矗积,春花似錦全肮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乍恐,卻和暖如春评疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茵烈。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工百匆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呜投。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓加匈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仑荐。 傳聞我的和親對象是個(gè)殘疾皇子雕拼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 一. 運(yùn)算符 1.1. 除法、整除释漆、取模運(yùn)算 我們來看一下除法悲没、整除、取模運(yùn)算 1.2. ??=賦值操作 dart...
    codeTao閱讀 1,216評論 0 1
  • 原作者coderwhy Flutter之搞定Dart(二)[https://mp.weixin.qq.com/s/...
    小冰山口閱讀 389評論 0 1
  • 面向?qū)ο筇匦?1.類(class ) Dart是一個(gè)面向?qū)ο缶幊陶Z言,同時(shí)支持基于mixin的繼承機(jī)制示姿。每個(gè)對象都...
    蔥花思雞蛋閱讀 615評論 0 1
  • Dart語法學(xué)習(xí) 運(yùn)算符 特殊運(yùn)算符 ??= - 原來的變量有值時(shí)甜橱,那么??=不執(zhí)行 ?? - 前面的數(shù)據(jù)有值,...
    lmfei閱讀 175評論 0 0
  • 總體概述 運(yùn)算符 流程控制 類和對象 泛型 庫的使用 一栈戳、運(yùn)算符 1.1岂傲、Dart 所有的運(yùn)算符描述運(yùn)算符一元后綴...
    IIronMan閱讀 494評論 2 3