Dart语言零基础学习笔记(二十一)
Dart 的mixins
mixins就是在类中混入其他功能。
在Dart中可以使用mixins实现类似多继承的功能,
with关键字
作为mixins的类只能继承自Object,不能继承其他类
mixins绝不是继承,也不是接口,而是一种全新的特性
class A {
String info="this is A'info";
void printA(){
print("A");
}
}
class B {
void printB(){
print("B");
}
}
class C with A,B{
}
void main(){
var c=new C();
c.printA();
c.printB();
print(c.info);
}
作为mixins的类不能有构造函数
一个类同时继承和mixins多个类
继承的类可以有构造函数
mixins的类不能有构造函数
class Printinfo {
var name;
Printinfo(this.name);
void printInfo() {
print('this is printinfo : ' + name);
}
}
class A {
String info = "this is A'info";
void printA() {
print("A");
}
}
class B {
void printB() {
print("B");
}
}
/*C继承了printinfo类,mixins A类和B类*/
class C extends Printinfo with A, B {
C(name) : super(name);
}
void main() {
var c = new C('name=baibai');
c.printA();
c.printB();
print(c.info);
c.printInfo();
}
// A
// B
// this is A'info
// this is printinfo : name=baibai
mixins的两个类里面有两个同样的方法,后面类的方法会覆盖前面类的方法
eg :
类A和类B都有相同的方法run()
类C在mixins类A和类B后只运行了类B的方法run()
class A {
String info = "this is A'info";
void printA() {
print("A");
}
run() {
print('run A');
}
}
class B {
void printB() {
print("B");
}
run() {
print('run B');
}
}
class C with A, B {}
void main() {
var c = new C();
c.run();//run B
}
类printinfo,类A,类B都有相同的方法run()
类C在继承了类printinfo 后,mixins类A和类B,最后只运行了类B的方法run()
class Printinfo {
var name;
Printinfo(this.name);
void printInfo() {
print('this is printinfo : ' + name);
}
run() {
print('run printinfo');
}
}
class A {
String info = "this is A'info";
void printA() {
print("A");
}
run() {
print('run A');
}
}
class B {
void printB() {
print("B");
}
run() {
print('run B');
}
}
/*C继承了printinfo类,mixins A类和B类*/
class C extends Printinfo with A, B {
C(name) : super(name);
}
void main() {
var c = new C('name=baibai');
c.run();//run B
}