文章目录
一、 命名构造方法
二、 工厂构造方法
三、 命名工厂构造方法
四、 相关资源
一、 命名构造方法
命名构造方法 :
定义格式 : 类名.方法名()
Student.cover(Student student):super(student.name, student.age);
父类构造函数 : 如果父类没有默认构造函数, 子类必须调用父类的构造函数 ;
方法体 : 命名构造方法与普通构造函数一样 , 可以有方法体 , 也可以不写方法体 ;
// 命名构造方法也可以有方法体 Student.init(Student student):super(student.name, student.age){ print("命名构造方法 : name : ${student.name}, age : ${student.age}"); }
代码示例 :
// 定义 Dart 类 // 与 Java 语言类似, 所有的类默认继承 Object 类 class Person{ // 定义变量 String name; int age; // 标准构造方法, 下面的方法是常用的构造方法写法 Person(this.name, this.age); // 重写父类的方法 @override String toString() { return "$name : $age"; } } // 继承 class Student extends Person{ // 命名构造方法 // 定义格式 : 类名.方法名() // 父类构造函数 : 如果父类没有默认构造函数, 子类必须调用父类的构造函数 Student.cover(Student student):super(student.name, student.age); // 命名构造方法也可以有方法体 Student.init(Student student):super(student.name, student.age){ print("命名构造方法 : name : ${student.name}, age : ${student.age}"); } }
二、 工厂构造方法
工厂构造方法就是 单例模式 , 工厂构造方法作用是返回之前已经创建的对象 , 之前创建对象时需要缓存下来 ;
工厂构造方法规则 : 在构造方法前添加 factory 关键字 ;
定义了工厂构造方法的类 :
// 使用工厂构造方法实现单例模式 // 工厂构造方法就是单例模式 // 工厂构造方法作用是返回之前已经创建的对象 , 之前创建对象时需要缓存下来 ; class Student2{ // 静态成员 static Student2 instace; // 工厂构造方法 factory Student2(){ if(instace == null){ // 调用命名构造方法创建 Student2 对象 instace = Student2.init(); } // 返回单例对象 return instace; } // 命名构造方法 Student2.init(); }
测试工厂构造方法 :
factoryConstructorDemo(){ Student2 stu1 = Student2(); print("stu1 创建完成 : ${stu1}"); Student2 stu2 = Student2(); print("stu2 创建完成 : ${stu2}"); print("对比 stu1 与 stu2 : stu1 == stu2 : ${stu1 == stu2}"); }
执行结果 :
I/flutter (32158): stu1 创建完成 : Instance of 'Student2' I/flutter (32158): stu2 创建完成 : Instance of 'Student2' I/flutter (32158): 对比 stu1 与 stu2 : stu1 == stu2 : true