文章目录

  • 简介
  • 使用extends
  • 抽象类和接口
  • mixins
  • 总结

简介

虽然dart中的类只能有一个父类,也就是单继承的,但是dart提供了mixin语法来绕过这样限制。

今天,和大家一起来探讨一下dart类中的继承。

使用extends

和JAVA一样,dart中可以定义一个父类,然后使用extends来继承他,得到一个子类,如下所示:

class Student{}
class Boy extends Student{}

在子类中,可以使用super关键词来调用父类的方法。

抽象类和接口

dart中除了继承普通类之外,还可以继承抽象类和实现接口。

抽象类是以abstract关键词修饰的class,如下所示:

abstract class Student{String getName();
}

抽象类中通常会有抽象方法,抽象方法需要在子类中进行实现。

当然抽象类中也可以有具体实现的方法,但是抽象类不可以被实例化,如果你想在抽象类中实例化对象,这可以使用之前我们提到的工厂构造函数。

和java不同的是,dart中并没有interface,他引入的是一个Implicit interfaces的概念。

对应每个对象来说,都隐式定义了一个包含类中所有方法和属性的接口。

一般来说,如果一个对象包含另外一个对象的结构和方法,但是他们之间的内容又是不一样的,则可以使用implements来隐式实现接口,如下所示:

class Student{String name;String get _name => name;
}class Girl implements Student{@overrideString name;@overrideString get _name => "girls";
}

在dart中一个类可以implements多个接口。

上面的例子中,我们用到了@override注解,他表示子类对父类方法或者属性的重写。

在使用@override中,我们需要注意的是,子类对父类的实现会有下面几个限制:

  1. 子类的实现方法的返回值,必须和父类返回值相同,或者是父类返回值的子类。
  2. 子类的实现方法的参数,必须和父类方法参数相同,或者是父类参数的父类。
  3. 子类方法的参数必须和父类的参数个数相同。

mixins

虽然dart不支持多重继承,但是可以使用mixin来实现类似多重继承的功能。

要使用mixins,可以使用关键字with,如下所示:

class Boy extends Student with Person {// ···name='boy';myName();
}

在dart中mixin是一个特殊的类,使用关键词mixin来描述,mixin的类中,没有构造函数,如下所示:

mixin Person {String name='';void myName() {print('my name is:'+name);}
}

在mixin中可以定义有用的方法和属性,继承mixin的类可以重写对应的属性和方法,从而达到自定义的功能。

在mixin中我们也可以指定特定的类,也就是说只有特定的类才能够使用mixin,则可以使用关键词on,如下所示:

mixin Person on Boy{String name='';void myName() {print('my name is:'+name);}
}

总结

以上就是dart中继承的使用,dart中还可以继承方法,这是dart的高级应用,我们会在后续的文章中进行介绍,敬请期待。

本文已收录于 http://www.flydean.com/07-dart-extend/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

dart系列之:dart类的扩展相关推荐

  1. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...

  2. dart系列之:dart类中的构造函数

    文章目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中 ...

  3. dart系列之:dart代码规范实践指南

    文章目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的 ...

  4. dart系列之:dart类中的泛型

    文章目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在 ...

  5. dart系列之:dart语言中的内置类型

    文章目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只 ...

  6. dart系列之:dart语言中的变量

    文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...

  7. dart系列之:dart优秀的秘诀-隔离机制

    文章目录 简介 dart中的隔离机制 生成一个Isolate Isolate之间的交互 一个例子 总结 简介 之前介绍了很多dart中的异步编程技巧,不知道大家有没有发现一个问题,如果是在java的异 ...

  8. dart系列之:dart语言中的异常

    文章目录 简介 Exception和Error Throw和catch Finally 总结 简介 Exception是程序中的异常情况,在JAVA中exception有checked Excepti ...

  9. dart系列之:dart中的异步编程

    文章目录 简介 为什么要用异步编程 怎么使用 Future 异步异常处理 在同步函数中调用异步函数 总结 简介 熟悉javascript的朋友应该知道,在ES6中引入了await和async的语法,可 ...

最新文章

  1. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
  2. axure小程序模板_微信小程序模板案例收集
  3. DTStructure分治法与最大子列和问题
  4. windows 2008 远程桌面如何设置允许多用户登录?
  5. 爱立信卫翰思:已囊括拉美一半以上…
  6. jcseg 1.7.2 版发布了
  7. freeMark模板导出word
  8. 西门子电机选型参考一
  9. 广数系统加工中心编程_加工中心宏程序编程应用案例分享
  10. 计算机数字音频制作工具
  11. linux redis-连接命令
  12. 第一章、银行会计的基本原理和基本核算方法
  13. 数据挖掘--风电机组异常数据识别与清洗
  14. 情人节快乐(转)十五首最美爱情古诗词,伴你过一个温馨浪漫的情人节
  15. 问题:网页版微信协议如何获取语音消息并播放
  16. flutter 微信登录 包名不对,请检查包名是否与开放平台填写一致
  17. 计算机主机和cpu的区别,主机与cpu的区别
  18. 简直不要太硬了!一文带你彻底理解文件系统
  19. 【ABAQUS入门】简易仿真建模流程一览
  20. fastreport 打印有 demo version字样_噬神者3免费试玩DEMO试玩 | 伊迪丝芬奇的记忆将登陆SWITCH...

热门文章

  1. HDOJ1536 S-nim
  2. 安卓进阶系列-08异步加载AsynsTask使用
  3. 指数型生成函数[bzoj3456]城市规划
  4. boost中unordered_map的用法
  5. Flink 在又拍云日志批处理中的实践
  6. Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位
  7. python time,datetime当前时间,昨天时间,时间戳和字符串的转化
  8. 喜提 redir contributor
  9. 从618大促看直播风口,电商玩家如何走得更远
  10. UCloud裴志伟:最小价值模型,技术迭代与客户需求可以达成平衡