【Flutter】Dart 面向对象 ( mixins 特性 )

网友投稿 663 2022-05-30

文章目录

一、mixins 简介

二、mixins 判定示例

二、mixins 示例

四、 相关资源

一、mixins 简介

mixins 作用 : mixins 是 Dart 的重要特性 ;

添加特性 :

mixins 可以为类添加一些特性 ;

重构代码 :

mixins 是多个类层次结构中重构代码的一种途径 ;

mixins 使用 : 在 with 关键字后跟上若干 mixin 名称 , 如果有多个使用逗号分隔 ;

with 的位置 : 在 extends 关键字之后 , mixin 名称之前 ;

mixins 实现要素 ★ : 满足下面三种要求的类就是 mixins ;

① 继承 Object :

创建一个继承自 Object 的子类 , 不能继承其它类 ;

② 无构造方法 :

不能声明构造方法 , 所有的构造方法都不声明 ( 包括命名 , 工厂 , 普通构造方法 ) ;

③ 无 super 调用 :

不能通过 super 调用父类方法 ;

抽象类 和 普通类 都可以是 mixins ;

二、mixins 判定示例

判定下面的 Student2 , AbstractPerson , Student3 , Student4 哪个是 mixins ;

// 使用工厂构造方法实现单例模式 // 工厂构造方法就是单例模式 // 工厂构造方法作用是返回之前已经创建的对象 , 之前创建对象时需要缓存下来 ; class Student2{ // 静态成员 static Student2 instace; // 工厂构造方法 factory Student2(){ if(instace == null){ // 调用命名构造方法创建 Student2 对象 instace = Student2.init(); } // 返回单例对象 return instace; } // 命名构造方法 Student2.init(); } // 定义抽象类 ★★ abstract class AbstractPerson{ // 抽象类中可以定义没有方法体的方法 void log(); // 抽象类中可以包含有方法体的方法 void log2(){ print("AbstractPerson"); } } // 继承抽象类 , 必须实现抽象类中的抽象方法 class Student3 extends AbstractPerson{ @override void log() { print("Student3"); } } // 抽象类继承抽象类 , 不必实现抽象类中的抽象方法 abstract class Student4 extends AbstractPerson{ }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

Student2 有构造函数 , 不是 mixins ;

AbstractPerson 符合 mixins 三个条件 , 是 mixins ; 抽象类也可以是 mixins ;

Student3 不是继承自 Object , 不是 mixins ;

Student4 不是继承自 Object , 不是 mixins ;

二、mixins 示例

代码示例 : 通过 mixins 为 Student5 类添加了 AbstractPerson 特征 , 在开发中为现有的类赋予已经存在的 mixins 类的特性 ;

// 定义 Dart 类 // 与 Java 语言类似, 所有的类默认继承 Object 类 class Person{ // 定义变量 String name; int age; // 私有字段 int _achievement; // 标准构造方法, 下面的方法是常用的构造方法写法 Person(this.name, this.age); // get 方法 : 设置私有字段 achievement 的 get 方法, // 让外界可以访问 Person 对象的 _achievement 私有成员 int get achievement => _achievement; // set 方法 : 设置私有字段 achievement 的 set 方法, // 让外界可以设置 Person 对象的 _achievement 私有成员值 set achievement(int achievement){ _achievement = achievement; } // 静态方法 , 通过类名调用 static log(){ print("log"); } // 重写父类的方法 @override String toString() { return "$name : $age"; } } // 定义抽象类 abstract class AbstractPerson{ // 抽象类中可以定义没有方法体的方法 void log(); // 抽象类中可以包含有方法体的方法 void log2(){ print("AbstractPerson"); } } // ★★ 通过 mixins 为 Student5 类添加了 AbstractPerson 特征 // ★★ 在开发中为现有的类赋予已经存在的 mixins 类的特性 class Student5 extends Person with AbstractPerson{ Student5(String name, int age) : super(name, age); @override void log() { // TODO: implement log } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

【Flutter】Dart 面向对象 ( mixins 特性 )

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

四、 相关资源

参考资料 :

Flutter 官网 : https://flutter.dev/

Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 )

官方 GitHub 地址 : https://github.com/flutter

Flutter 中文社区 : https://flutter.cn/

Flutter 实用教程 : https://flutter.cn/docs/cookbook

Flutter CodeLab : https://codelabs.flutter-io.cn/

Dart 中文文档 : https://dart.cn/

Dart 开发者官网 : https://api.dart.dev/

Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/

Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )

博客源码下载 :

GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 随博客进度一直更新 , 有可能没有本博客的源码 )

博客源码快照 : https://download.csdn.net/download/han1202012/15447573 ( 本篇博客的源码快照 , 可以找到本博客的源码 )

Android Flutter 面向对象编程

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IoT Link Studio 中的Demo程序(hello_world_demo)-0x01
下一篇:使用微信API创建公众号自定义菜单
相关文章