一、概述

  • 继承(关键字 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)

  mixins的中文意思是混入,就是在类中混入其他功能。在Dart中可以使用mixins实现类似多继承的功能因为mixins使用的条件,随着Dart版本一直在变,这里说的是Dart2.x中使用mixins的条件:
  • (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的用法与区别的更多相关文章

  1. 【Dart学习】-- Dart之extends && implements && with的用法与区别

    一,概述 继承(关键字 extends) 混入  mixins (关键字 with) 接口实现(关键字 implements) 这三种关系可以同时存在,但是有前后顺序: extends -> m ...

  2. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...

  3. 分组函数group by和Oracle中分析函数partition by的用法以及区别

    1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.

  4. Nginx中root与alias的用法及区别:

    Nginx中root与alias都是定义location {}块中虚拟目录访问的文件位置: 先看看两者在用法上的区别: location /img/ { alias /var/www/image/; ...

  5. 【转】STL中mem_fun和mem_fun_ref的用法及区别

    原文:http://www.cppblog.com/mysileng/archive/2012/12/25/196615.html 引子: 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是 ...

  6. js中innerHTML与innerText的用法与区别

    用法: <div id="test">    <span style="color:red">test1</span> te ...

  7. C中的malloc/free与C++中的new/delete的用法与区别

    1.先介绍malloc/free的用法: 原型函数: void *malloc(long NumBytes); 该函数分配了NumBytes个字节的内容,分配的空间是堆空间 malloc()根据用户所 ...

  8. php中get_cfg_var()和ini_get()的用法及区别

    php里get_cfg_var()和ini_get()都是取得配置值的函数,当你需要获取php.ini里的某个选项的配置值时,这两个函数都都可以使用,得到的结果是一样的. 不过,get_cfg_var ...

  9. java中this和super的用法及区别

    this 用法1:代表当前对象本身 用法2:方法形参和类成员变量重名,用this进行区别 class demo{ private int age = 10; public int getAge(int ...

随机推荐

  1. JS中的垃圾回收(GC)

    垃圾回收(GC): 1. 就像人生活的时间长了会产生垃圾一样,程序运行过程中也会产生垃圾,这些垃圾积攒过多以后,会导致程序运行的速度过慢, 所以我们需要一个垃圾回收的机制,来处理程序运行中产生的垃圾. ...

  2. 文件上传到ftp服务工具类

    直接引用此java工具类就好 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...

  3. ElementUI的Loading组件 —— 想实现在请求后台数据之前开启Loading组件,请求成功或失败之后,关闭Loading组件

    我在实际项目开发中,遇到了这个需求,记录一下~~~~~~ 在ElementUI官网上有几种实现Loading的方法,但官网上是在一个方法里写了开启与关闭组件,所以可以根据官网的实现方法进行一个封装,便 ...

  4. 如何定义一个BUG

    一.划分一个bug的等级 bug等级主要分为致命.严重.一般.轻微或者建议四个等级: 1.致命错误:系统无法执行.崩溃或严重资源不足.应用模块无法启动或异常退出.无法测试.造成系统不稳定.价值较高功能 ...

  5. Oracle使用——PLSQL的中文乱码显示全是问号--Oracle查询中文乱码

      问题 这两天刚将PLSQL与Oracle配置好,可是在PLSQL中插入数据时,出现一个问题,PLSQL中的表里无法显示中文,中文无法保存.无法输出,中文在表中显示问号,如图: 原因 经过一番查证, ...

  6. EF批量添加数据之修改SQL Server执行上限

    asp.net core 项目 打开Startup.cs services.AddDbContext<MyContext>( options => { options.UseSqlS ...

  7. 【JZOJ6285】飘雪圣域

    description analysis 从求联通块出发根本没做法,于是考虑连通块里面的边 对于一个询问\([l,r]\),一条边的左端点\(≥l\)且右端点\(≤r\)才在这个区间的点之间 于是对于 ...

  8. C# 与 C/C++ 网络传输字符串解决方案

    { 不管你的数据加没加密,只要有中文,请转16进制后再处理,把16进制再转为GB2312的byte再发送, 接收的话同样 c++ 发送时转16进制再发送,c#16进制转字符串后再转GB2312就可以了 ...

  9. R语言 数据类型

    R语言数据类型 通常,在使用任何编程语言进行编程时,您需要使用各种变量来存储各种信息. 变量只是保留值的存储位置. 这意味着,当你创建一个变量,你必须在内存中保留一些空间来存储它们. 您可能想存储各种 ...

  10. 容斥原理解一般不定方程——cf451E经典题

    /* 给定n个盒子,第i个盒子有ai朵花,现在从中选取m朵花,问选取方案数 用容斥定理解决 m=x1+x2+..+xn C(m+n-1,n-1)+sum{ (-1)^p * C(m+n-1-(1+n1 ...