Dart中一个类实现多个接口以及Dart中的 Mixins

一、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}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Flutter/Dart - Dart中一个类实现多个接口 以及Dart中的Mixins

Dart中implements实现多个接口abstractclassA{Stringname;printA();}abstractclassB{printB();}classCimplementsA,B{@overrideStringname;