【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 )
生活随笔
收集整理的這篇文章主要介紹了
【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 )
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、 命名構(gòu)造方法
- 二、 工廠構(gòu)造方法
- 三、 命名工廠構(gòu)造方法
- 四、 相關(guān)資源
一、 命名構(gòu)造方法
命名構(gòu)造方法 :
- 定義格式 : 類名.方法名()
- 父類構(gòu)造函數(shù) : 如果父類沒有默認(rèn)構(gòu)造函數(shù), 子類必須調(diào)用父類的構(gòu)造函數(shù) ;
- 方法體 : 命名構(gòu)造方法與普通構(gòu)造函數(shù)一樣 , 可以有方法體 , 也可以不寫方法體 ;
代碼示例 :
// 定義 Dart 類 // 與 Java 語言類似, 所有的類默認(rèn)繼承 Object 類 class Person{// 定義變量String name;int age;// 標(biāo)準(zhǔn)構(gòu)造方法, 下面的方法是常用的構(gòu)造方法寫法Person(this.name, this.age);// 重寫父類的方法@overrideString toString() {return "$name : $age";} }// 繼承 class Student extends Person{// 命名構(gòu)造方法// 定義格式 : 類名.方法名()// 父類構(gòu)造函數(shù) : 如果父類沒有默認(rèn)構(gòu)造函數(shù), 子類必須調(diào)用父類的構(gòu)造函數(shù)Student.cover(Student student):super(student.name, student.age);// 命名構(gòu)造方法也可以有方法體Student.init(Student student):super(student.name, student.age){print("命名構(gòu)造方法 : name : ${student.name}, age : ${student.age}");}}二、 工廠構(gòu)造方法
工廠構(gòu)造方法就是 單例模式 , 工廠構(gòu)造方法作用是返回之前已經(jīng)創(chuàng)建的對象 , 之前創(chuàng)建對象時(shí)需要緩存下來 ;
工廠構(gòu)造方法規(guī)則 : 在構(gòu)造方法前添加 factory 關(guān)鍵字 ;
定義了工廠構(gòu)造方法的類 :
// 使用工廠構(gòu)造方法實(shí)現(xiàn)單例模式 // 工廠構(gòu)造方法就是單例模式 // 工廠構(gòu)造方法作用是返回之前已經(jīng)創(chuàng)建的對象 , 之前創(chuàng)建對象時(shí)需要緩存下來 ; class Student2{// 靜態(tài)成員static Student2 instace;// 工廠構(gòu)造方法factory Student2(){if(instace == null){// 調(diào)用命名構(gòu)造方法創(chuàng)建 Student2 對象instace = Student2.init();}// 返回單例對象return instace;}// 命名構(gòu)造方法Student2.init(); }測試工廠構(gòu)造方法 :
factoryConstructorDemo(){Student2 stu1 = Student2();print("stu1 創(chuàng)建完成 : ${stu1}");Student2 stu2 = Student2();print("stu2 創(chuàng)建完成 : ${stu2}");print("對比 stu1 與 stu2 : stu1 == stu2 : ${stu1 == stu2}");}執(zhí)行結(jié)果 :
I/flutter (32158): stu1 創(chuàng)建完成 : Instance of 'Student2' I/flutter (32158): stu2 創(chuàng)建完成 : Instance of 'Student2' I/flutter (32158): 對比 stu1 與 stu2 : stu1 == stu2 : true三、 命名工廠構(gòu)造方法
命名工廠構(gòu)造方法格式 :
factory 類名.方法名命名工廠構(gòu)造方法可以有 返回值 ;
如果類中有 final 修飾的成員 , 在命名構(gòu)造方法中必須對其進(jìn)行初始化 ;
但是在命名工廠構(gòu)造方法中 , 可以不初始化 final 類型成員
命名工廠構(gòu)造方法示例 :
// 繼承 class Student extends Person{// 私有變量, 以下劃線開始的變量是私有變量int _grade;String school;String city;String address;// 父類構(gòu)造函數(shù)調(diào)用 : 如果父類有非空參數(shù)的構(gòu)造函數(shù), 子類必須實(shí)現(xiàn)相同參數(shù)的構(gòu)造函數(shù)// 如果該類有父類 , 那么先調(diào)用父類的構(gòu)造方法 , 完成父類的初始化// 然后才能完成自己的初始化//// this.school 指定自有參數(shù)// {this.school} 是可選參數(shù), 可選參數(shù)必須在構(gòu)造函數(shù)參數(shù)列表中最后一個(gè)//// 默認(rèn)參數(shù) : 可選參數(shù)中如果用戶不初始化該可選參數(shù) , 那么為其指定一個(gè)默認(rèn)值// {this.city = "北京"} 指定了如果用戶不初始化 city 變量, 那么為其初始化 "北京" 字符串值//// 初始化列表 : 冒號后面的內(nèi)容就是初始化列表// 父類構(gòu)造器也是初始化列表// 除了父類構(gòu)造方法之外 , 還可以在子類構(gòu)造方法體之前初始化示例變量// 不同的初始化實(shí)例變量之間使用逗號隔開//// 父類構(gòu)造方法 : 如果父類沒有默認(rèn)構(gòu)造方法 (無參構(gòu)造方法) ,// 必須在初始化列表中調(diào)用父類構(gòu)造函數(shù) , super(name, age) ;//// 構(gòu)造方法方法體 : 可以省略 ;Student(this._grade, String name, int age,{this.school, this.city = "北京"}): address = "北京市海淀區(qū)" ,super(name, age);// 命名構(gòu)造方法// 定義格式 : 類名.方法名()// 父類構(gòu)造函數(shù) : 如果父類沒有默認(rèn)構(gòu)造函數(shù), 子類必須調(diào)用父類的構(gòu)造函數(shù)Student.cover(Student student):super(student.name, student.age);// 命名構(gòu)造方法也可以有方法體Student.init(Student student):super(student.name, student.age){print("命名構(gòu)造方法 : name : ${student.name}, age : ${student.age}");}// 命名工廠構(gòu)造方法 : factory 類名.方法名// 命名工廠構(gòu)造方法可以有返回值// 如果類中有 final 修飾的成員 , 在命名構(gòu)造方法中必須對其進(jìn)行初始化// 但是在命名工廠構(gòu)造方法中 , 可以不初始化 final 類型成員factory Student.init2(){return Student(1, "Tom", 18);}}四、 相關(guān)資源
參考資料 :
- Flutter 官網(wǎng) : https://flutter.dev/
- Flutter 開發(fā)文檔 : https://flutter.cn/docs ( 強(qiáng)烈推薦 )
- 官方 GitHub 地址 : https://github.com/flutter
- Flutter 中文社區(qū) : https://flutter.cn/
- Flutter 實(shí)用教程 : https://flutter.cn/docs/cookbook
- Flutter CodeLab : https://codelabs.flutter-io.cn/
- Dart 中文文檔 : https://dart.cn/
- Dart 開發(fā)者官網(wǎng) : https://api.dart.dev/
- Flutter 中文網(wǎng) ( 非官方 , 翻譯的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
- Flutter 相關(guān)問題 : https://flutterchina.club/faq/ ( 入門階段推薦看一遍 )
博客源碼下載 :
-
GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 隨博客進(jìn)度一直更新 , 有可能沒有本博客的源碼 )
-
博客源碼快照 : https://download.csdn.net/download/han1202012/15381508 ( 本篇博客的源碼快照 , 可以找到本博客的源碼 )
總結(jié)
以上是生活随笔為你收集整理的【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Flutter 环境安装相关
- 下一篇: 【Flutter】Dart 面向对象 (