Flutter(Dart)中extends 、 implements 、 with的用法與區(qū)別

1.關(guān)鍵字解析

  • extends:繼承Class
  • with:混入Class
  • implements:實(shí)現(xiàn)Class
    這三種關(guān)系可以同時(shí)存在,但是有前后順序:
    extends - with- implements
    extens在前,with在中間,implements最后

2.繼承(extends)

Flutter中的繼承和Java中的繼承是一樣的:
Flutter中的繼承是單繼承,只能繼承一個(gè)Class,不能是多個(gè),繼承后子類重寫或者調(diào)用父類的方法,也可以獲取父類的屬性等,在Java中只能是公開的,但Dart里面不存在公開跟私有屬性,Dart里面一般而言如果是以下橫線”_“開頭的我們就把他認(rèn)作是私有的,但是依舊是可以調(diào)用的

class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class C {
  c1() {}
}

class S extends A {
  @override
  a1() {
    return super.a1();
  }
}

class SS {
  ss() {
    S().a1();
    S()._aa();
  }
}

3.with(混入)

  • 混合的對(duì)象是類
  • 可以混合多個(gè)
    如果A類混入了B類,那么A就可以直接調(diào)用B里面的方法,且不需要實(shí)例化B,不需要B做單例,也不需要靜態(tài)被調(diào)用的方法,還能混入多個(gè)類,這對(duì)方法復(fù)用帶來(lái)的極大的便利性,破除了眾多限制
class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class B2 {
  b2() {}
}

class S extends A with B, B2 {
  @override
  a1() {
    return super.a1();
  }

  @override
  b1() {
    return super.b1();
  }

}

class SS {
  ss() {
    S().a1();
    S()._aa();
    S().b1();
    S().b2();
  }
}

4.implements(實(shí)現(xiàn))

這個(gè)跟Java中基本沒(méi)有區(qū)別,需要注意的就是Dart中是沒(méi)有接口這一說(shuō)的,實(shí)現(xiàn)的也是Class

class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class B2 {
  b2() {}
}

class C1 {
  c1() {}
}

class C2 {
  c2() {}
}

class S extends A with B, B2 implements C1, C2 {
  @override
  a1() {
    return super.a1();
  }

  @override
  b1() {
    return super.b1();
  }

  @override
  b2() {
    return super.b2();
  }

  @override
  c1() {

  }

  @override
  c2() {
 
  }
}

class SS {
  ss() {
    S().a1();
    S()._aa();
    S().b1();
    S().b2();
    S().c1();
    S().c2();
  }
}

更多Flutter學(xué)習(xí)請(qǐng)移步

Flutter入門教學(xué)目錄持續(xù)更新中

Github源代碼持續(xù)更新中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。