一、Dart中一个类实现多个接口
1abstract class A{ 2 String name; 3 printA(); 4} 5 6abstract class B{ 7 printB(); 8} 9 10class C implements A,B{ //鼠标放在C处,选择快速修复 11 @override 12 String name; 13 @override 14 printA() { 15 print('printA'); 16 } 17 @override 18 printB() { 19 // TODO: implement printB 20 return null; 21 } 22 23 24} 25 26 27void main(){ 28 29 C c=new C(); 30 c.printA(); 31 32}
二、Dart中的mixins
mixins的中文意思是混入,就是在类中混入其他功能。
在Dart中可以使用mixins实现类似多继承的功能
因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性
通过with关键词实现多继承
1//A类和B类不能继承其他类 2class A { 3 String info="this is A"; 4 void printA(){ 5 print("A"); 6 } 7} 8 9class B { 10 void printB(){ 11 print("B"); 12 } 13} 14 15class C with A,B{ 16 17} 18 19void main(){ 20 21 var c=new C(); 22 c.printA(); 23 c.printB(); 24 print(c.info); 25 26} 27
1class Person{ 2 String name; 3 num age; 4 Person(this.name,this.age); 5 printInfo(){ 6 print('${this.name}----${this.age}'); 7 } 8 void run(){ 9 print("Person Run"); 10 } 11} 12 13class A { 14 String info="this is A"; 15 void printA(){ 16 print("A"); 17 } 18 void run(){ 19 print("A Run"); 20 } 21} 22 23class B { 24 void printB(){ 25 print("B"); 26 } 27 void run(){ 28 print("B Run"); 29 } 30} 31 32class C extends Person with B,A{ //C继承Person,然后mixins B和A 33 C(String name, num age) : super(name, age); 34 35} 36 37void main(){ 38 var c=new C('张三',20); 39 c.printInfo(); 40 // c.printB(); 41 // print(c.info); 42 43 c.run(); //当A和B中有同样的方法时,with B,A 谁在后执行谁 44 45 46} 47
Dart中的mixins 的类型
mixins的类型就是其超类的子类型
1class A { 2 String info="this is A"; 3 void printA(){ 4 print("A"); 5 } 6} 7 8class B { 9 void printB(){ 10 print("B"); 11 } 12} 13 14class C with A,B{ 15 16} 17 18void main(){ 19 var c=new C(); 20 21 print(c is C); //true 22 print(c is A); //true 23 print(c is B); //true 24 25}