在 Dart 2.1.0版本后,引入了 mixin 专门定义混入类型,这样使得语义更加清晰,可以对比一下下面的两种实现方式。
很显然,使用 mixin 会让我们更清晰地知道这是一个混入类型,而不会当做一个类来使用。
官方的建议是,自 Dart 2.1.0版本以后,不应该再使用 class 关键字定义混入类型,以避免出现随意混入,导致代码不好维护。
Mixin 和 class 比较类似,但它没有构造函数。通过 Mixin,可以扩展一个类的属性和功能,使得类具有 Mixin 类的属性和函数 API。
同时 Mixin 也解决了 dart 单一继承的问题。
abstract class 类名称{}class 子类 with 类名称{}abstract class Animal {
  late String name;
  late int age;
}
mixin class NickName {
  late String nickName;
}
class Dog extends Animal with NickName {
  Dog(String name, int age, String nickName) {
    this.name = name;
    this.age = age;
    this.nickName = nickName;
  }
  void Say() {
    print("My name is ${this.name}, I am ${this.age} years old.");
    print("My nick name is ${this.nickName}.");
  }
}
void main(List<String> args) {
  Dog dog = Dog("wangcai", 2, "dog");
  dog.Say();
}
多个混入时,如果有同名属性,后引入的类会覆盖前面引入类的属性。