mixins的中文意思是混入,就是在类中混入其他功能
在Dart中可以使用mixins实现类似多继承的功能
Dart2.x中使用mixins的条件:
1. 作为mixins的类只能继承自Object,不能继承其他类;
2. 作为mixins的类不能有构造函数;
3. 一个类可以mixins多个mixins类;
4. mixins不是继承,也不是接口,而是一种全新的特性。
使用with进行mixins混入
class A {
void printInfoA() {
print('This is A.');
}
}
class B {
void printInfoB() {
print('This is B.');
}
}
class C with A, B {}
void main() {
C c = new C();
c.printInfoA();
c.printInfoB();
}
作为mixins的类不能有构造函数

继承时可以加入mixins混入(继承的函数可以有构造函数)
class D {
String name;
num age;
D(this.name, this.age);
void printInfoD() {
print('This is $name, age:$age');
}
}
class A {
void printInfoA() {
print('This is A.');
}
}
class B {
void printInfoB() {
print('This is B.');
}
}
class C extends D with A, B {
C(String name, num age) : super(name, age);
}
void main() {
C c = new C('zhangsan', 21);
c.printInfoA();
c.printInfoB();
c.printInfoD();
}
mixins的类具有相同名的函数,with最后的类将会覆盖之前的
这将输出:
This is A.
This is zhangsan, age:21
class D {
String name;
num age;
D(this.name, this.age);
void printInfoD() {
print('This is $name, age:$age');
}
}
class A {
void printInfo() {
print('This is A.');
}
}
class B {
void printInfo() {
print('This is B.');
}
}
class C extends D with A, B {
C(String name, num age) : super(name, age);
}
void main() {
C c = new C('zhangsan', 21);
c.printInfo();
c.printInfoD();
}
mixins的类型就是其超类的子类型
均为true
class D {
String name;
num age;
D(this.name, this.age);
void printInfoD() {
print('This is $name, age:$age');
}
}
class A {
void printInfo() {
print('This is A.');
}
}
class B {
void printInfo() {
print('This is B.');
}
}
class C extends D with A, B {
C(String name, num age) : super(name, age);
}
void main() {
C c = new C('zhangsan', 21);
print(c is A);
print(c is B);
print(c is C);
print(c is D);
}
Comments NOTHING