dart中extends、 implements、with的用法与区别
一、概述
- 继承(关键字 extends)
- 混入 mixins (关键字 with)
- 接口实现(关键字 implements)
这三种关系可以同时存在,但是有前后顺序:
- extends -> mixins -> implements
extens在前,mixins在中间,implements最后;
二、实战
2.1 继承(extends)
dart中的继承规则:
- 子类使用extends关键词来继承父类
- 子类会继承父类里面可见的属性和方法 但是不会继承构造函数
- 子类能复写父类的方法 getter和setter
- 子类重写超类的方法,要用@override
- 子类调用超类的方法,要用super
- 子类可以继承父类的非私有变量
栗子举起来:
- class Person {
- //公有变量
- String name;
- num age;
- //私有变量
- String _gender;
- //类名构造函数
- Person(this.name,this.age);
- //公有的方法
- void printInfo() {
- print("${this.name}---${this.age}");
- }
- work(){
- print("${this.name}在工作...");
- }
- }
- class Web extends Person{
- Web(String name, num age) : super(name, age);
- run(){
- print('run');
- super.work(); //自类调用父类的方法
- }
- //覆写父类的方法
- @override //可以写也可以不写 建议在覆写父类方法的时候加上 @override
- void printInfo(){
- print("姓名:${this.name}---年龄:${this.age}");
- }
- }
- main(){
- Web w =n ew Web('李四',);
- // w.printInfo();
- w.run();
- }
2.2 混合 mixins (with)
- (1) 作为mixins的类只能继承自Object,不能继承其他类
- (2) 作为mixins的类不能有构造函数
- (3) 一个类可以mixins多个mixins类
- (4) mixins绝不是继承,也不是接口,而是一种全新的特性
- 看具体代码:
- class Person{
- String name;
- num age;
- Person(this.name,this.age);
- printInfo(){
- print('${this.name}----${this.age}');
- }
- void run(){
- print("Person Run");
- }
- }
- class A {
- String info="this is A";
- void printA(){
- print("A");
- }
- void run(){
- print("A Run");
- }
- }
- class B {
- void printB(){
- print("B");
- }
- void run(){
- print("B Run");
- }
- }
- class C extends Person with B,A{
- C(String name, num age) : super(name, age);
- }
- void main(){
- var c = new C('张三',);
- c.printInfo();
- // c.printB();
- // print(c.info);
- c.run();
- }
2.3 接口实现(implements)
Flutter是没有interface的,但是Flutter中的每个类都是一个隐式的接口,这个接口包含类里的所有成员变量,以及定义的方法。如果有一个类 A,你想让类B拥有A的API,但又不想拥有A里的实现,那么你就应该把A当做接口,类B implements 类A.
所以在Flutter中:class 就是 interface
- 当class被当做interface用时,class中的方法就是接口的方法,需要在子类里重新实现,在子类实现的时候要加@override
- 当class被当做interface用时,class中的成员变量也需要在子类里重新实现。在成员变量前加@override
- /*
- Dart中一个类实现多个接口:
- */
- abstract class A{
- String name;
- printA();
- }
- abstract class B{
- printB();
- }
- class C implements A,B{
- @override
- String name;
- @override
- printA() {
- print('printA');
- }
- @override
- printB() {
- // TODO: implement printB
- return null;
- }
- }
- void main(){
- C c=new C();
- c.printA();
- }
dart中extends、 implements、with的用法与区别的更多相关文章
- 【Dart学习】-- Dart之extends && implements && with的用法与区别
一,概述 继承(关键字 extends) 混入 mixins (关键字 with) 接口实现(关键字 implements) 这三种关系可以同时存在,但是有前后顺序: extends -> m ...
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...
- 分组函数group by和Oracle中分析函数partition by的用法以及区别
1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.
- Nginx中root与alias的用法及区别:
Nginx中root与alias都是定义location {}块中虚拟目录访问的文件位置: 先看看两者在用法上的区别: location /img/ { alias /var/www/image/; ...
- 【转】STL中mem_fun和mem_fun_ref的用法及区别
原文:http://www.cppblog.com/mysileng/archive/2012/12/25/196615.html 引子: 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是 ...
- js中innerHTML与innerText的用法与区别
用法: <div id="test"> <span style="color:red">test1</span> te ...
- C中的malloc/free与C++中的new/delete的用法与区别
1.先介绍malloc/free的用法: 原型函数: void *malloc(long NumBytes); 该函数分配了NumBytes个字节的内容,分配的空间是堆空间 malloc()根据用户所 ...
- php中get_cfg_var()和ini_get()的用法及区别
php里get_cfg_var()和ini_get()都是取得配置值的函数,当你需要获取php.ini里的某个选项的配置值时,这两个函数都都可以使用,得到的结果是一样的. 不过,get_cfg_var ...
- java中this和super的用法及区别
this 用法1:代表当前对象本身 用法2:方法形参和类成员变量重名,用this进行区别 class demo{ private int age = 10; public int getAge(int ...
随机推荐
- Java 整型数组只有一个整数是只出现一次的,其余都出现两次
package writtenExamination; /** * @author lindaZ * @date 2015年10月22日 * @todo 找出数组中仅出现一次的数,其余数字出现两次 * ...
- docker学习---搭建Docker LAMP环境
1.环境 系统版本:CentOS Linux release 7.4.1708 docker版本:docker-ce-18.09 主机IP:192.168.121.121 2.载入MySQL和PHP镜 ...
- 笔记37 Spring Web Flow——流程的组件
在Spring Web Flow中,流程是由三个主要元素定义的:状态.转移和 流程数据. 一.状态 Spring Web Flow定义了五种不同类型的状态.通过选择Spring Web Flow的状态 ...
- day01 python起源 介绍 解释器 变量 流程控制if
day01 python 一.python的起源 1.python简介 java 企业级应用, android, app c 操作系统, 做开发语言的, 游戏的内核 ...
- python中while与else的联姻
循环使用 else 语句在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断 ...
- shell脚本中关于日期的操作
一.计算指定日期的前一天的日期 date -d "yesterday 20150401 " +%Y%m%d 二.如果获取当前日期的前一天 date -d " ...
- dubbo入门之服务消费
今天,我们来看看dubbo消费的执行过程 首先,我们都知道dubbo是一个基于netty实现的RPC框架,底层通信是使用netty来实现的.在学习dubbo的时候,或许我们都会有下面的这些疑惑: 1. ...
- 关于mybaitis
mybatis启动流程 1.首先来看看最简单的mybatis项目启动过程 public static void mybatisTest() throws IOException { String re ...
- Spring boot热部署实战
1.介绍 在开发工程中,修改一点儿代码,想看效果就需要重新启动服务,这样会花费大量时间在重启服务上,通过devtools热部署可以大大减少重启服务的时间. 之所以能减少时间,是因为Spring Boo ...
- leetcood学习笔记-437-路径总和③**
题目描述: 方法一:栈 class Solution(object): def pathSum(self, root, sum): """ :type root: Tre ...