在 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();
}
多个混入时,如果有同名属性,后引入的类会覆盖前面引入类的属性。