Dart中抽象类:Drat抽象类主要是用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1、抽象类通过abstract关键字来定义
2、Drat中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
3、如果子类继承抽象类必须得实现里面的抽象方法
4、如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法
5、抽象类不能被实例化,只有继承它的子类可以

extends抽象类和implements的区别:
1、如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话我们就用extends继承抽象类
2、如果只是把抽象类当做标准的话我们就用implements实现抽象类

案例:定义一个Animal 类要求它的子类必须包括eat方法
抽象类的作用主要在于约束 定义标准,一个抽象类里面有抽象方法的话,子类要去继承该抽象类,那么就必须重写其抽象方法

abstract class Animal {eat(); //抽象方法 在抽象类里面定义的方法在子类里必须实现,如果不在子类里重写的话子类会报错run();printInfo() {print('我是一个抽象类里面的普通方法');}
}class Dog extends Animal {@overrideeat() {print('小狗eat');}@overriderun() {print('小狗run');}
}main() {Dog d = new Dog();d.eat(); //小狗eatd.printInfo(); //我是一个抽象类里面的普通方法
}

Dart中的多态:允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果
子类的实例赋值给父类的引用
多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现

abstract class Animal {eat(); //抽象方法
}class Dog extends Animal {@overrideeat() {print('小狗eat');}
}class Cat extends Animal {@overrideeat() {print('小猫eat');}
}main() {Dog d = new Dog();d.eat(); //小狗eatCat c = new Cat();c.eat(); //小猫eat
}

接口
和Java一样,dart也有接口,但是和Java还是有区别的。
首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
同样使用implements关键字进行实现。
但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍。
而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
建议使用抽象类定义接口。

//例子:定义一个DB库 支持mysql mssql mongdb
//mysql mssql mongdb这三个类里面都有同样的方法abstract class Db {// 当作接口 接口:就是约定 规范late String uri; //数据库的链接地址add(String data);save();delete();
}class Mysql implements Db {@overridelate String uri;Mysql(this.uri);@overrideadd(data) {print('这是mysql的add方法' + data);}@overridedelete() {// TODO: implement deletethrow UnimplementedError();}@overridesave() {// TODO: implement savethrow UnimplementedError();}
}class Mssql implements Db {@overridelate String uri;@overrideadd(String data) {print('这是MssqlMssql的add方法' + data);}@overridedelete() {// TODO: implement deletethrow UnimplementedError();}@overridesave() {// TODO: implement savethrow UnimplementedError();}
}main() {//xxxxxxx-- 数据库地址Mysql mysql = new Mysql('xxxxxxx');mysql.add('12345');
}

mixins的中文意思是混入,就是在类中混入其他功能。

在Dart中可以使用mixins实现类似多继承的功能

因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性

class A {String info = 'this is A';void printA() {print("A");}
}class B {void printB() {print("B");}
}class C with A, B {}void main() {var c = new C();c.printA(); //Ac.printB(); //Bprint(c.info); //this is A
}

Dart中抽象类 多态以及接口相关推荐

  1. c#中抽象类(abstract)和接口(interface)的相同点与区别

    相同点: 1.都可以被继承 2.都不能被实例化 3.都可以包含方法声明 4.派生类必须实现未实现的方法 区别: 1.抽象基类可以定义字段.属性.方法实现.接口只能定义属性.索引器.事件.和方法声明,不 ...

  2. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  3. java学习(七)java中抽象类及 接口

    抽象类的特点: A:抽象类和抽象方法必须用abstract关键字修饰. B:抽象类中不一定有抽象方法,但是抽象方法的类必须定义为抽象类 c: 抽象类不能被实例化,因为它不是具体的. 抽象类有构造方法, ...

  4. python shape函数_Python中的多态及抽象类

    本书同名免费MOOC<Python编程基础及应用>在哔哩哔哩(B站)热播,作者带着你学. 版权声明:本文内容引用自作者的图书<Python编程基础及应用>(高等教育出版社).本 ...

  5. java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?

    谢邀,直接回答. 接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不 ...

  6. C#中抽象类和接口的区别与应用场景

    一直对这两个基础概念没有很好的认识,在网上发现一个我能够理解的基础概念理解,存一下,反复看. C#中抽象类和接口的区别与应用场景一. 1.抽象类:抽象类是特殊的类,只是不能被实例化;和普通类一样里面什 ...

  7. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  8. Java学习打卡第四天——[抽象类,多态,接口,形参的简介和使用]

    Javaee之[抽象类] Javaee之[多态] Javaee之[接口] Javaee之[抽象类,多态,接口,继承] Javaee之[形参] 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的, ...

  9. java学习笔记03-封装 继承 抽象类 多态 接口

    封装:在类的属性设置时 使用private将数据隐藏.不允许使用a.xingming来调用数据,可以设置get和set函数来对数据进行查看和修改(在其中添加if的判断语句来控制该参数的修改权限和读取权 ...

最新文章

  1. 清华大学董胤蓬:Adversarial Robustness of Deep Learning
  2. oracle 连接查询--内连接与外连接
  3. Java的this、super和final关键字
  4. ABAP--通过LDB_PROCESS函数使用逻辑数据库
  5. 新建/初始化git仓库
  6. 【Java入门】泛型的学习与应用
  7. oracle sql练习_使用Scrapy爬虫,并将数据存储到oracle
  8. StudyTonight 中文系列教程【翻译完成】
  9. 核心对象+持久对象全析(1)
  10. VC6在64位Windows7(家庭版或其他版本)下调试的时候,再结束调试,程序无法退出
  11. 爬虫英雄联盟官网的全英雄介绍和技能介绍
  12. 洛谷 U19159 采摘毒瘤
  13. win10 nginx部署前端项目(静态资源服务器和HTML)
  14. 英语练习79 I want to be a doctor
  15. 关于阿里云与mangoDB的关系,以及uni-app基于阿里云打包H5以及app的讲解及注意事项
  16. Hadoop 安装snappy(编译源码)
  17. 重新理解CNN(精)(为什么多个滤波器?....)
  18. 涪陵创新计算机学校是什么专业,重庆市涪陵创新计算机学校开展增材制造技术教学研讨会...
  19. 2022.12六级真题第3套(共6页)
  20. 期货的操作方法(期货的操作方法包括)

热门文章

  1. Linux 系统进程管理与定时任务
  2. topik怎么读_学渣室友3个月拿下韩语TOPIK5级,到底发生了什么?!
  3. 微信页面可以在谷歌浏览器调试
  4. STM8S903K3T6C基于ST Visual Develop开发串口数据收发示例
  5. Photoshop批量制作座牌
  6. 强大溢出工具包:Metasploit命令行下的使用 (转至77169)
  7. 敏捷项目管理,POLYV来支招
  8. 宏油庄冒--菜川式快餐和小吃的完美结合
  9. java学习笔记:常见字符编码和编码头BOM
  10. RPL(3):RFC6550翻译(3)---协议综述