Dart 學(xué)習(xí)筆記(三):類(創(chuàng)建,靜態(tài)成員,繼承,)

Dart和OC跟Swift一樣是面向?qū)ο笞兂傻恼Z言,所以也有 封裝,繼承和多態(tài)的概念, 在Dart里萬物皆對象, 并且所有對象都繼承與Object, 所有的對象都是類的實例,通常情況下 類是由 屬性和方法組成的

通過class關(guān)鍵字來創(chuàng)建類

class Person {
  String name = '張三';
  int age = 23;

  void getInfo() {
    // print("姓名:$name ----- 年齡:$age");
    print('姓名:${this.name}----- 年齡:${this.age}');
    // this關(guān)鍵字指向了當(dāng)前類的實例
  }
}

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

如果想要在初始化的時候?qū)崿F(xiàn)一些功能 則需要使用構(gòu)造函數(shù)
// 這是默認構(gòu)造函數(shù)
Person() {
   print('這是構(gòu)造函數(shù)里的內(nèi)容, 在類初始化的時候觸發(fā)');
}
我個人認為這個構(gòu)造函數(shù)和iOS當(dāng)中的初始化方法意義差不多, 也可以被重寫,并且可以添加參數(shù)
Person(String name, int age) {
   this.name = name;
   this.age = age;
   print('初始化 姓名:${this.name}----- 年齡:${this.age}');
}

// 默認構(gòu)造函數(shù)的簡寫
Person(this.name, this.age){
   print('初始化 姓名:${this.name}----- 年齡:${this.age}');
}

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

Person.me() {
   print('我是一個命名構(gòu)造函數(shù)');
}
默認構(gòu)造函數(shù)有且只有一個, 但是命名構(gòu)造函數(shù)可以有很多個

類當(dāng)中的私有變量和私有方法

用 _ 來修飾 前提是必須要把類單獨抽離成一個文件, dart里面沒有什么關(guān)鍵字是用來修飾私有變量和私有方法的
可以通過公共方法來調(diào)用私有方法和私有變量
class Animal {
  String _name = '猴子';//私有屬性
  int age = 20;

  // 可以通過訪問共有方法來間接獲取私有屬性
  String getName () {
    return this._name;
  }

  // 私有方法
  void _run() {
    print('這是一個私有方法');
  }

  // 通過公共方法調(diào)用私有方法
  execRun () {
    this._run();
  }

  Animal(this._name, this.age);

  void getInfo () {
    print('姓名:${this._name}----- 年齡:${this.age}');
  }
}

靜態(tài)函數(shù)和靜態(tài)屬性

用static來修飾, 靜態(tài)成員可以通過類名直接調(diào)用

int age = 22;
static var height = 175; // 靜態(tài)屬性
static void getHeight() {// 靜態(tài)方法
    print(height); 
}
void getInfoTemp () {
    print('${this.age}-----${height}');// 非靜態(tài)方法可以訪問靜態(tài)成員和非靜態(tài)成員
    getHeight();// 非靜態(tài)方法 也可以訪問靜態(tài)方法
}

// 調(diào)用
// 可以直接通過類來調(diào)用靜態(tài)變量和靜態(tài)方法,而不是通過實例變量
print(Person.height);
Person.getHeight();
注意
靜態(tài)方法 只能訪問靜態(tài)成員 不能訪問非靜態(tài)屬性也不能訪問非靜態(tài)方法
調(diào)用靜態(tài)成員時不能使用this 因為this代表當(dāng)前類的實例
非靜態(tài)方法可以訪問靜態(tài)成員和非靜態(tài)成員(方法和屬性都可訪問)

繼承

用extends來繼承其他類
子類會繼承父類里面可見的屬性和方法 但是不會繼承構(gòu)造函數(shù)
子類能復(fù)寫父類的方法
如果父類的默認構(gòu)造函數(shù) 為有參數(shù)的構(gòu)造函數(shù) 則子類必須要寫自己的構(gòu)造函數(shù)
重寫父類方法 直接和父類重名就行了或者用 @override
@override 可以寫 也可以不寫 建議寫上
子類里調(diào)用父類的方法 用super
class Boy extends Person {
  String sex;
  // 如果父類的默認構(gòu)造函數(shù) 為有參數(shù)的構(gòu)造函數(shù) 則子類必須要寫自己的構(gòu)造函數(shù)
  Boy(String name, int age, String sex) : super(name, age) { 
  // super 表示  把子類初始化時傳進來的參數(shù) 賦值給父類
     this.sex = sex;
  }

  @override  // @override 可以寫 也可以不寫 建議寫上
  void getInfo() {
    // TODO: implement getInfo
    // super.getInfo();
    print('復(fù)寫父類 ${this.name}-----${this.age}');
  } 
}

抽象類用abstract關(guān)鍵字

1: Dart抽象類主要用于定義標(biāo)準(zhǔn), 子類可以繼承抽象類,也可以實現(xiàn)抽象類接口
2: Dart中抽象方法不能用abstract來修飾, Dart中沒有方法體的方法稱為抽象方法
3: 如果子類繼承抽象類,那么必須要實現(xiàn)抽象類里的抽象方法

抽象類用途: 抽象類主要用于約束子類 比如子類Dog中必須實現(xiàn)eat和run這兩個方法 這個時候父類就要用abstract來修飾(定義標(biāo)準(zhǔn))

abstract class Animal {
  eat(); // 抽象方法 因為沒有方法體
  run();

  printInfo() {// 普通方法 因為有方法體
    print('我是抽象類里的一個普通方法');
  }
}

class Dog extends Animal {
  @override
  eat() {
    // TODO: implement eat
    print('小狗在吃狗糧');
  }

  @override
  run() {
    // TODO: implement run
    print('小狗在跑');
  }
}

接口 用關(guān)鍵詞implements實現(xiàn)

abstract class A{
  String name;
  printA();
}

abstract class B{
  printB();
}

class C implements A,B{  
  @override
  String name;  
  @override
  printA() {
    print('printA');
  }
  @override
  printB() {
    // TODO: implement printB
    return null;
  }
}

Mixins

1: 作為Mixins的類只能繼承自O(shè)bject 不能繼承其他類(這里指的不是根類 如果A繼承自Person那么A不能被c混入)
2: 作為Mixins的類不能有構(gòu)造函數(shù)(A B不能有構(gòu)造函數(shù))
3: Mixins可以混入多個類
4: Mixinx不是繼承 不是接口 是新的特性

總結(jié)

abstract, implements以及Mixins這三個東西的異同點,如何取舍及用途,網(wǎng)上有很多文章,我就不長篇大論了, 這里我只是說下我個人的理解,如果不對請各位指正
1:這三個東西可以實現(xiàn)開發(fā)者多繼承的意圖
2:可以制定規(guī)則規(guī)范,用來約束子類或者引用他們的類
3:我個人認為,這三個東西還有個重要的用途-------解耦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末博杖,一起剝皮案震驚了整個濱河市抗愁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愚争,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劝萤,死亡現(xiàn)場離奇詭異吭狡,居然都是意外死亡囤锉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門蜗细,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裆操,“玉大人,你說我怎么就攤上這事炉媒∽偾” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵吊骤,是天一觀的道長缎岗。 經(jīng)常有香客問我,道長白粉,這世上最難降的妖魔是什么传泊? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任鼠渺,我火速辦了婚禮,結(jié)果婚禮上眷细,老公的妹妹穿的比我還像新娘拦盹。我一直安慰自己,他們只是感情好薪鹦,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布掌敬。 她就那樣靜靜地躺著,像睡著了一般池磁。 火紅的嫁衣襯著肌膚如雪奔害。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天地熄,我揣著相機與錄音华临,去河邊找鬼。 笑死端考,一個胖子當(dāng)著我的面吹牛雅潭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播却特,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼扶供,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裂明?” 一聲冷哼從身側(cè)響起椿浓,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闽晦,沒想到半個月后扳碍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡仙蛉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年笋敞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠瘪。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡夯巷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哀墓,到底是詐尸還是另有隱情鞭莽,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布麸祷,位于F島的核電站澎怒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喷面,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一星瘾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惧辈,春花似錦琳状、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至边翁,卻和暖如春翎承,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背符匾。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工叨咖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啊胶。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓甸各,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焰坪。 傳聞我的和親對象是個殘疾皇子趣倾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 一. Dart入口方法 每一個flutter項目的lib目錄里面都有一個main.dart。這個文件就是flutt...
    騎馬縱天下閱讀 2,505評論 0 1
  • 此文章是v1.0+時編寫某饰,年代久遠儒恋,小心有毒,謹慎食用B斗Α1套恰涂邀! 一些重要概念 所有的東西都是對象瘟仿,所有的對象都是類的...
    soojade閱讀 10,040評論 2 27
  • 很詳細的Dart講解 Dart 數(shù)據(jù)類型 數(shù)據(jù)的操作 跟Java差不多 變量與常量 var ,const比勉,fina...
    付小影子閱讀 659評論 0 1
  • 類概述 普通類變量實例變量(創(chuàng)建對象后劳较,使用 對象.變量名 調(diào)用)靜態(tài)變量(用static修飾,使用 類...
    小懶豆閱讀 529評論 0 0
  • 類(Classes) Dart 是一種面向?qū)ο笳Z言浩聋,包含類和基于mixin的繼承兩部分观蜗。每個對象是一個類的實例,并...
    Longshihua閱讀 446評論 0 0