Skip to content
ShenYj edited this page Aug 22, 2024 · 1 revision

Mixins

Mixins 就是在类中混入其他功能
在 Dart 中使用 mixins 实现类似于都继承的功能

class Musician extends Performer with Musical {
  // ···
}

class Maestro extends Person with Musical, Aggressive, Demented {
  Maestro(String maestroName) {
    name = maestroName;
    canConduct = true;
  }
}

Dart2.x中的条件

  1. 作为 mixins的类只能继承自object, 不能继承其他类
  2. 作为mixins的类不能有构造函数
  3. 一个类可以mixins多个mixins类
  4. mixins绝不是继承,也不是借口,而是一种全新的特性

目前 3.x下 使用 mixins 定义一个mixins类,继承和定义构造函数时都会编译报错

定义一个 mixins

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');
    }
  }
}
  • 使用mixins 实现多继承

    mixin class A {
        String name;
        printA();
    }
    
    mixin class B {
        printB();
    }
    
    class E {
        int e;
        E(this.e);
    }
    
    /// 将 implements 替换为 with 
    /// E 有构造函数, 也无法作为 mixins 类被 Z 继承 (但是可以直接继承,比如 `class Z extends E with A, B`)
    class Z with A, B {
    
        @override
        String name;
    
        @override
        printA() { }
    
        @override
        printB() { }
    }

参考资料: Dart: Classes & objects - Mixins

Getting Started

Social

Clone this wiki locally