前面我们通过官方文档Dart语法预览快速的学习了Dart的基本语法特性。 本篇我们学习Dart中关于类型扩展的三种关系:继承、混入、接口实现;分别对应关键字:extends、with、implements。

在编写一个类时可以同时使用继承、混入和接口实现,依次按顺序即可extends, with, implements.

Dart中的继承(extends)与Java语言中的继承特性基本一致,Dart里的继承也是单继承。

Dart中的混入(Mixin)(with)是Dart的重要特性,是Dart提供在多个类层次结构中复用代码的方法。在维基百科中,关于Mixin的定义如下: Mixin是面向对象程序设计语言中的类,提供了方法的实现,其他类可以访问mixin类的方法而不必成为其子类。下面是一个MixIn的例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class A {
  foo() => print('A');
}

mixin M1 {
  foo() => print('M1');
}

mixin M2 {
  foo() => print('M2');
}

class A12 extends A with M1, M2 {

}

class A21 extends A with M2, M1 {

}

void main() {
  A12().foo();  // M2
  A21().foo(); // M1
}

可以看到最后混入的特性会覆盖掉前面混入的特性,所以调用A12实例的foo()函数时,输出了M2,而调用A21实例的foo()函数时输出了M1。

Dart中的接口实现(implements): 在Dart中的每个类都隐式定义了一个包含所有成员实例的隐式接口,一个类可以使用implements关键字实现一个或多个接口,需要实现每个隐式接口定义的API。 如Dart核心库中的Comparable类作为隐式接口,Datetime类实现了Comparable这个隐式接口。

1
2
3
class DateTime implements Comparable<DateTime> {
  ......
}

参考