Dart語(yǔ)言的繼承

類的定義

在Dart中定義一個(gè)類的方法如下

class Person extends Object{
  String name;
  num age;
  String sex = '男';  // 屬性
  Person(this.name,this.age,this.sex); //構(gòu)造方法

  List a = List();

  // 打印個(gè)人信息(對(duì)象方法)
  void printPersonInfo(){
    print("名字=$name  年齡=$age  性別=$sex");
  }
}

main() {
  Person p = new Person('小明', 20, '男');
  p.printPersonInfo();
}

// 打印結(jié)果
名字=小明  年齡=20  性別=男

Dart類的三種繼承方式

  1. 父類繼承 extends
  2. 實(shí)現(xiàn)接口 implements
  3. 多繼承 mixins

直接繼承 extends

  1. 直接繼承和其它語(yǔ)言的子類繼承于父類沒(méi)有區(qū)別
  2. 子類具有父親所有公開的屬性和方法
  3. 需要實(shí)現(xiàn)構(gòu)造方法
class XiaoMing extends Person {
  XiaoMing(String name, num age, String sex) : super(name, age, sex); 
}

main() {
  XiaoMing p = new Person('小明', 20, '男');
  p.printPersonInfo();
}

抽象類(implements)

  1. 抽象類的功能主要是定義標(biāo)準(zhǔn),在dart中采有abstract關(guān)鍵字定義抽象類;
abstract class Person{
  String name;
  num age;
  String sex = '男';  // 屬性

  // 實(shí)現(xiàn)方法體的方法,不是抽象方法
  void printPersonInfo(){
      print("名字=$name  年齡=$age  性別=$sex");
  }

  // 這是一個(gè)沒(méi)有實(shí)現(xiàn)方法體的方法,在Dart中叫抽象方法,
  void drink();
}
  1. 抽象類不能實(shí)例化
// 此時(shí)Person類為抽象類,像下面的實(shí)例化會(huì)編譯器會(huì)報(bào)錯(cuò)
Person p = new Person('小明', 20, '男');
  1. 繼承于抽象類的子類必須實(shí)現(xiàn)抽象類的沒(méi)有方法體的方法(抽象方法);
  2. Dart中的抽象類中沒(méi)有方法體的方法我們稱之為抽象方法;
class PersonA implements Person,Animal {
}

接口

在dart中沒(méi)有專門定義接口的方法,定義接口和定義抽象類一樣

多繼承(mixins 混入)

  1. 作為mixins類只能繼承于Object,不能繼承于其它類;如果類繼承于非Object類,with該類會(huì)報(bào)錯(cuò),也就不能稱之為mixins類;
  2. 作為mixins的類不能有構(gòu)造函數(shù)
  3. 一個(gè)類可以with 多個(gè) mixins類
  4. with關(guān)鍵字繼承的類可以是抽象類,也可以是普通類,但這些類都只能繼承于Object

思考題

  1. extends、with、implement 的區(qū)別
    1.1. extends只能繼承于一個(gè)類;這個(gè)類可以是抽象類,也可以是普通類(對(duì)不對(duì))
    1.2. implement用于實(shí)現(xiàn)接口,接口在dart中使用抽象類表示,implements一般用于實(shí)現(xiàn)抽象類的屬性和方法
    1.3. with關(guān)鍵字只能繼承于父類為Object的類
    1.4.

  2. 使用extends可不可以繼承抽象類;

  3. 類A,with C類和D類,C類和D類中都有一個(gè)方法 printInfo,執(zhí)行A類的printInfo,會(huì)執(zhí)行那個(gè)類的;
    答案:會(huì)執(zhí)行with類的順序,with順序在后面的方法會(huì)將前面的方法替換掉
    此處應(yīng)該有例子

  4. 類A,繼承于類Person, 并with于 C類和D類,person類、C類和D類中都有一個(gè)方法 printInfo,執(zhí)行A類的printInfo,會(huì)執(zhí)行那個(gè)類的;
    答案:會(huì)執(zhí)行with類的順序,with順序在后面的方法會(huì)將前面的方法替換掉
    此處應(yīng)該有例子

  5. mixins與真正的多繼承有什么區(qū)別
    5.1. mixins只能繼承于父類為Object 的類
    5.2 mixins 可以用with關(guān)鍵繼承抽象類,也必須實(shí)現(xiàn)抽象類中抽像方法

  6. 對(duì)象使用with、implements、extends 繼承后,該對(duì)象的類型都是什么?
    答案: 見代碼

abstract class A {
 void printInfo(){
   print('我是ClassA');
 }
}

abstract class B {
 void test();
}

class C{

}
class D<T> extends B  with A implements C{
}

main(List<String> args) {
 D d = new D();
 // 三種粥承方式的類型
 print(d is D);
 print(d is A);
 print(d is B);
 print(d is C);

// 打印結(jié)果
 true
 true
 true
 true
}
  1. 抽像類能不能繼承于抽像類?
    答案:可以,但是繼承了抽象類的抽象類不能再作為mixins類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容