mixins 作用 : mixins 是 Dart 的重要特性 ;
mixins 使用 : 在 with 关键字后跟上若干 mixin 名称 , 如果有多个使用逗号分隔 ;
with 的位置 : 在 extends 关键字之后 , mixin 名称之前 ;
mixins 实现要素 ★ : 满足下面三种要求的类就是 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{
}
Student2 有构造函数 , 不是 mixins ;
AbstractPerson 符合 mixins 三个条件 , 是 mixins ; 抽象类也可以是 mixins ;
Student3 不是继承自 Object , 不是 mixins ;
Student4 不是继承自 Object , 不是 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
}
}
参考资料 :
博客源码下载 :