Dart语言学习(十三) Dart Mixins 实现多继承

Mixins

Mixins(混入功能)相当于多继承,也就是说可以继承多个类,使用with关键字来实现Mixins的功能。

那么多个类中有相同的方法时候,会被覆盖吗?覆盖的先后是什么?

class A{
  void a(){
    print("A.a()...");
  }
}

class B{

  void a(){
    print("B.a()...");
  }

  void b(){
    print("B.b()...");
  }
}

现在新建一个类D,使得D继承A和B

// 类D 继承A和B
class D  extends A with B{

}

执行:

void main() {
  var d = new D();
  d.a();
}

输出:

B.a()...

如果我们改变A 和B 顺序,如下

// 类D 继承A和B,B在前A在后
class D  extends B with A{

}

再次执行

void main() {
  var d = new D();
  d.a();
}

输出:

A.a()...

说明了:后面的类中的方法将前面的类中相同的方法覆盖

我们再验证三个类的情况:

新建类 C

class C{

  void a(){
    print("C.a()...");
  }

  void b(){
    print("C.b()...");
  }

  void c(){
    print("C.c()...");
  }
}

修改类D

// 类D 继承A、B、C,A,C在前 ,B在最后
class D  extends A with C,B{

}

再次执行

void main() {
  var d = new D();
  d.a();
}

输出:

B.a()...

再次说明:后面的类中的方法将前面的类中相同的方法覆盖。

综上,Dart中使用Mixins,可以达到多继承的效果,后面的类中的方法将前面的类中相同的方法覆盖

Dart学习系列文章:https://www.cnblogs.com/jukaiit/category/1636484.html

原文地址:https://www.cnblogs.com/jukaiit/p/12260252.html

时间: 2024-08-30 06:00:16

Dart语言学习(十三) Dart Mixins 实现多继承的相关文章

Dart语言学习(六) Dart 列表List数组

一.创建list 创建List : var list = [1,2,3,"Dart",true]; 创建不可变List : var list = const [1,2,3,"Dart",true]; 构造创建:var list3 = new List(); 二.常用操作 [],length,add(),insert(),remove(),clear()indexOf(),lastIndexOf()排序sort(),子数组 sublist()打乱shuffle(),转

Dart语言学习( 五) Dart Bool类型

Dart Bool类型和其他语言类似,比较简单 其特点有: 1.使用 bool 表示布尔类型 2.布尔值只有 true 和 false 3.布尔类型bool默认值是null bool isTrue = true; bool isFalse = false; bool defaultBool ; print(isTrue); print(isFalse); print(defaultBool); print("Hello".isEmpty); 输出如下: true false null

Dart语言学习(二) Dart的常量和变量

1.使用var声明变量,可赋予不同类型的值 2.未初始化时候,默认值未null var a; print(a); a = 10; print(a); a = 'Hello Dart'; print(a); 输出: null 10 Hello Dart 3. 使用final声明一个只能赋值一次的变量 4. 使用const声明常量 使用const声明的必须是编译器常量 5.声明变量的方式 var : [编译期]确定[变量类型] dynamic : [运行期]确定[变量类型] bool int dou

Dart语言学习( 三) Dart数值型

一.类型 数值型有 num,int, double  num a = 10; a = 12.5; print(a); print(a.runtimeType); int b = 20; // b = 20.5; print(b); print(b.runtimeType); double c = 10.5; // c = 30; print(c); print(c.runtimeType); print("\n"); 其中,runtimeType 为运行时的类型. 输出如下: 12.5

Dart语言学习

以下教程,感觉讲的比较清晰 Dart 语言简易教程(一): http://www.jianshu.com/p/8a62b1a2fd75 Dart 语言简易教程(二): http://www.jianshu.com/p/b2153a32dd8b Dart 语言简易教程(三): http://www.jianshu.com/p/6d2495a0d3d7 Dart 语言简易教程(四): http://www.jianshu.com/p/fdd046a6dc82 Dart 语言简易教程(五) http:

Go语言学习(十三)面向对象编程-继承

1.匿名组合 Go语言也提供了继承,但是采用了组合的方式,所以我们将其称为匿名组合: package main import "fmt" //定义基类 type Base struct { Name string } //基类相关的2个成员方法 func (base *Base) A() { fmt.Println("Base method A called...") } func (base *Base) B() { fmt.Println("Base

Dart语言特性必备了解!

学习Dart语言,必须将以下的概念熟记于心: 在dart语言中,一切皆为对象.所有的对象都是一个类的实例.甚至整数.函数.null也看做是对象.所有的对象都继承于Object类 尽管Dart是强类型语言,但是变量的类型指定不一定要标明,因为Dart可以推断出它的类型.比如说变量number就可以被推测出是int类型.如果你想明确表示这个变量不想被任何一个类型指定,那就使用特殊类型dynamic来表示. Dart语言支持通用类型,比如List<int>表示整数集列表,List<dynami

30分钟掌握Dart语言

在Dart中,一切都是对象,一切对象都是class的实例,哪怕是数字类型.方法甚至null都是对象,所有的对象都是继承自Object 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推断变量类型 Dart支持范型,List<int>表示一个整型的数据列表,List<dynamic>则是一个对象的列表,其中可以装任意对象 Dart支持顶层方法(如main方法),也支持类方法或对象方法,同时你也可以在方法内部创建方法 Dart支持顶层变量,也支持类变量或对象变量 跟Ja

【dart学习】-- Dart之函数

1. 指定返回值得函数 /** * 无返回值的函数 * params: 可以是任意类型(var和Object类型也可以任意类型). 当然这里的参数类型你可以随意指定我这里已dynamic为例 * 参数类型:你也可以指定var.Object等,再比如说你可以指定num, int,double, String.... * 如果我们对参数没有限制的话可以使用这个 */ void printDynamicParams(dynamic params){ print(params); } 主函数中我们调用p