前面我们通过官方文档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}

参考