一架梯子,一头程序猿,仰望星空!

Dart mixin混入


前面章节提到Dart语言的类是单继承的(只能继承一个父类),如果我们要想实现类似多继承的效果,可以使用mixin机制,又叫混入机制,例如把类A混入到类B中,那么类B就拥有了类A的成员,跟继承的特性非常相似。

提示:mixin机制也是一种复用已有代码的机制。

例子:

// 定义一个可以被mixin的类,使用mixin代替class关键词
// 注意:不能定义构造方法,其他的跟普通的类一样
mixin Musical {
  bool canPlayPiano = false;
  bool canCompose = false;
  bool canConduct = false;

  void entertainMe() {
    if (canPlayPiano) {
      print('Playing piano');
    } else if (canConduct) {
      print('Waving hands');
    } else {
      print('Humming to self');
    }
  }
}

// 使用with关键词可以混入多个mixin类,类之间使用逗号分隔。
class Musician with Musical {
  // Musician什么也没定义,就拥有了,Musical的所有成员
}

void main() {
  // 实例化Musician
  var p = Musician();
  // 调用混入的方法
  p.entertainMe();
}

当然你也可以在混入类的同时继承父类,例如:

// 继承了Person,同时混入了Musical, Aggressive, Demented三个类
class Maestro extends Person
    with Musical, Aggressive, Demented {
}