天天看點

#yyds幹貨盤點#dart系列之:dart類的擴充

文章目錄

  • ​​簡介​​
  • ​​使用extends​​
  • ​​抽象類和接口​​
  • ​​mixins​​
  • ​​總結​​

簡介

雖然dart中的類隻能有一個父類,也就是單繼承的,但是dart提供了mixin文法來繞過這樣限制。

今天,和大家一起來探讨一下dart類中的繼承。

使用extends

和JAVA一樣,dart中可以定義一個父類,然後使用extends來繼承他,得到一個子類,如下所示:

class Student{

}
class Boy extends Student{

}      

在子類中,可以使用super關鍵詞來調用父類的方法。

抽象類和接口

dart中除了繼承普通類之外,還可以繼承抽象類和實作接口。

抽象類是以abstract關鍵詞修飾的class,如下所示:

abstract class Student{
    String getName();
}      

抽象類中通常會有抽象方法,抽象方法需要在子類中進行實作。

當然抽象類中也可以有具體實作的方法,但是抽象類不可以被執行個體化,如果你想在抽象類中執行個體化對象,這可以使用之前我們提到的工廠構造函數。

和java不同的是,dart中并沒有interface,他引入的是一個Implicit interfaces的概念。

對應每個對象來說,都隐式定義了一個包含類中所有方法和屬性的接口。

一般來說,如果一個對象包含另外一個對象的結構和方法,但是他們之間的内容又是不一樣的,則可以使用implements來隐式實作接口,如下所示:

class Student{

  String name;
  String get _name => name;
}

class Girl implements Student{
  @override
  String name;

  @override
  String get _name => "girls";
}      

在dart中一個類可以implements多個接口。

上面的例子中,我們用到了@override注解,他表示子類對父類方法或者屬性的重寫。

在使用@override中,我們需要注意的是,子類對父類的實作會有下面幾個限制:

  1. 子類的實作方法的傳回值,必須和父類傳回值相同,或者是父類傳回值的子類。
  2. 子類的實作方法的參數,必須和父類方法參數相同,或者是父類參數的父類。
  3. 子類方法的參數必須和父類的參數個數相同。

mixins

雖然dart不支援多重繼承,但是可以使用mixin來實作類似多重繼承的功能。

要使用mixins,可以使用關鍵字with,如下所示:

class Boy extends Student with Person {
  // ···
  name='boy';
  myName();
}      

在dart中mixin是一個特殊的類,使用關鍵詞mixin來描述,mixin的類中,沒有構造函數,如下所示:

mixin Person {
  String name='';

  void myName() {
      print('my name is:'+name);
  }
}      

在mixin中可以定義有用的方法和屬性,繼承mixin的類可以重寫對應的屬性和方法,進而達到自定義的功能。

在mixin中我們也可以指定特定的類,也就是說隻有特定的類才能夠使用mixin,則可以使用關鍵詞on,如下所示:

mixin Person on Boy{
  String name='';

  void myName() {
      print('my name is:'+name);
  }
}      

總結

以上就是dart中繼承的使用,dart中還可以繼承方法,這是dart的進階應用,我們會在後續的文章中進行介紹,敬請期待。

本文已收錄于 ​​http://www.flydean.com/07-dart-extend/​​