日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 )

發(fā)布時(shí)間:2025/6/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flutter】Dart 面向对象 ( 命名构造方法 | 工厂构造方法 | 命名工厂构造方法 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 命名構(gòu)造方法
  • 二、 工廠構(gòu)造方法
  • 三、 命名工廠構(gòu)造方法
  • 四、 相關(guān)資源





一、 命名構(gòu)造方法



命名構(gòu)造方法 :

  • 定義格式 : 類名.方法名()
Student.cover(Student student):super(student.name, student.age);
  • 父類構(gòu)造函數(shù) : 如果父類沒有默認(rèn)構(gòu)造函數(shù), 子類必須調(diào)用父類的構(gòu)造函數(shù) ;
  • 方法體 : 命名構(gòu)造方法與普通構(gòu)造函數(shù)一樣 , 可以有方法體 , 也可以不寫方法體 ;
// 命名構(gòu)造方法也可以有方法體Student.init(Student student):super(student.name, student.age){print("命名構(gòu)造方法 : name : ${student.name}, age : ${student.age}");}

代碼示例 :

// 定義 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。