Flutter学习笔记(三):Dart语法之Mixin混入,以及extends、with、implements的区别
📅 2019-07-06 | 🖱️
🔖 flutter
前面我们通过官方文档Dart语法预览快速的学习了Dart的基本语法特性。 本篇我们学习Dart中关于类型扩展的三种关系:继承、混入、接口实现;分别对应关键字:extends、with、implements。
在编写一个类时可以同时使用继承、混入和接口实现,依次按顺序即可extends, with, implements
.
Dart中的继承(extends)与Java语言中的继承特性基本一致,Dart里的继承也是单继承。
Dart中的混入(Mixin)(with)是Dart的重要特性,是Dart提供在多个类层次结构中复用代码的方法。在维基百科中,关于Mixin的定义如下:
Mixin是面向对象程序设计语言中的类,提供了方法的实现,其他类可以访问mixin类的方法而不必成为其子类
。下面是一个MixIn的例子:
1class A {
2 foo() => print('A');
3}
4
5mixin M1 {
6 foo() => print('M1');
7}
8
9mixin M2 {
10 foo() => print('M2');
11}
12
13class A12 extends A with M1, M2 {
14
15}
16
17class A21 extends A with M2, M1 {
18
19}
20
21void main() {
22 A12().foo(); // M2
23 A21().foo(); // M1
24}
可以看到最后混入的特性会覆盖掉前面混入的特性,所以调用A12实例的foo()函数时,输出了M2,而调用A21实例的foo()函数时输出了M1。
Dart中的接口实现(implements): 在Dart中的每个类都隐式定义了一个包含所有成员实例的隐式接口,一个类可以使用implements关键字实现一个或多个接口,需要实现每个隐式接口定义的API。 如Dart核心库中的Comparable类作为隐式接口,Datetime类实现了Comparable这个隐式接口。
1class DateTime implements Comparable<DateTime> {
2 ......
3}