Flutter學(xué)習(xí)日記(五)--Dart類的構(gòu)造

不多說(shuō)了上代碼?。?!

///定義一個(gè)Dart類,所有的類都繼承自O(shè)bject,并且都是默認(rèn)繼承的,所以不需要使用extends
class Person {
  String name;
  int ages;

  ///標(biāo)準(zhǔn)的構(gòu)造方法
  Person(this.name, this.ages);

  ///多態(tài)的體現(xiàn),重載
  @override
  String toString() {
    return 'name:$name,age$ages';
  }
}

class Student extends Person {
  String _school; //通過(guò)_(下劃線)來(lái)標(biāo)識(shí)私有字段(變量)
  String city;
  String country;
  String name;

  ///可以為私有字段設(shè)置getter來(lái)讓外界獲取到私有字段
  String get school =>_school;
  ///可以為私有字段設(shè)置setter來(lái)控制外界對(duì)私有字段的修改
  set schllo(String value){
    _school=value;
  }
  //靜態(tài)方法
  static doPrint(String str){
    print("doPrint:$str");
  }

  ///構(gòu)造方法:
  ///通過(guò)this._school初始化自有參數(shù)
  ///name,age交給父類進(jìn)行初始化
  ///city為可選參數(shù)
  ///country為默認(rèn)參數(shù)
  Student(this._school, String name, int ages,
      {this.city, this.country = "China"})
      : //初始化列表:除了調(diào)用父類構(gòu)造器,載子類構(gòu)造器方法體之前,你也可以額初始化實(shí)例變量,不同的初始化變量之間用逗號(hào)分隔開(kāi)
        name = '$country.$city',
        //如果父類沒(méi)有默認(rèn)構(gòu)造方法(無(wú)參數(shù)的構(gòu)造方法),則需要載初始化列表中調(diào)用父類的構(gòu)造方法進(jìn)行初始化
        super(name, ages){
    print('構(gòu)造方法體不是必須的,也就是{}里面的,這樣只是簡(jiǎn)化了初始時(shí)的工作');
  }

  @override
  String toString() {
    return 'Student{name: $name}  ${this._school},city:$city,country:$country  ${super.toString()}';
  }

  ///命名構(gòu)造方法:[類名.方法名]
  ///使用命名構(gòu)造方法為類實(shí)現(xiàn)多個(gè)構(gòu)造方法
  Student.cover(Student student):super(student.name,student.ages){
    print('命名構(gòu)造方法');
  }
  ///命名工廠構(gòu)造方法:factory【類名.方法名】
  ///它可以有返回值,而且不需要將類的final變量作為參數(shù)(在命名構(gòu)造方法中final修飾的變量就必須進(jìn)行初始化),是提供一種靈活獲取對(duì)象的方式
  factory Student.stu(Student student){
    return Student(student._school, student.name, student.ages);
  }
}

class Logger{
  //創(chuàng)建靜態(tài)實(shí)例
  static Logger _cache;
  //工廠構(gòu)造方法都會(huì)使用factory關(guān)鍵字進(jìn)行標(biāo)識(shí),工廠構(gòu)造方法一般用于返回唯一類的實(shí)例
  factory Logger(){
    if(_cache==null){
      _cache=Logger._internal();
    }
    return _cache;
  }
  //下面也是構(gòu)造方法的一種,只是私有化了而已
  Logger._internal();
  void log(String msg){
    print(msg);
  }
}
///使用abstract修飾符來(lái)定義一個(gè)抽象類,該類不能被實(shí)例化
abstract class Study{
  void study();
}
//繼承抽象類就要實(shí)現(xiàn)它的抽象方法
class StudyFlutter extends Study{
  @override
  void study() {
    print('Learning Flutter');
  }

}
///為類添加特征:mixins
///mixins 是在多個(gè)類層次結(jié)構(gòu)中重用代碼的一種方式
///要是用mixins,在with關(guān)鍵字后面跟上一個(gè)或多次mixins的名字(用逗號(hào)分開(kāi)),并且with要用在extends的后面
///mixins的特征:實(shí)現(xiàn)mixins,就創(chuàng)建一個(gè)繼承Object類的子類(不能繼承其他類),不聲明任何構(gòu)造函數(shù),不調(diào)用super
///Study就是mixins
class Test extends Person with Study{
  Test(String name, int ages) : super(name, ages);

  @override
  void study() {
    // TODO: implement study
  }

}


?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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