現役エンジニアに悩みを無料相談詳細はこちら

【Flutter/Dart】mixin|複数のクラスを継承する

Dartのクラスで複数のクラスを継承できる「mixin」の使い方を紹介します。

「mixin」で定義したクラスはサブクラスで複数継承することができます。

目次

mixinの使い方

定義

mixin クラス名{}
mixin Walker {
  void canWalk() {
    print('I can walk.');
  }
}

mixinはクラス同様に定義します。

クラス(mixin)の継承

class サブクラス名 with クラス名, クラス名{}
class サブクラス名 extends スーパークラス名 with クラス名{}

mixinを継承するには「with」を使用し、複数のクラスを継承する場合は「,」で区切ります。

スーパークラスとmixinを同時に継承することも可能です。

class Duck extends Animal with Walker, Swimmer, Flyer {
  Duck() : super('duck');
}

//スーパークラス
class Animal {
  String name;
  Animal(this.name);

  void meWho() {
    print('I am ${this.name}');
  }
}

//mixin
mixin Walker {
  void canWalk() {
    print('I can walk.');
  }
}

mixin Swimmer {
  void canSwim() {
    print('I can swim.');
  }
}

mixin Flyer {
  void canFly() {
    print('I can fly.');
  }
}

mixinの呼び出し

var オブジェクト名 = クラス名();

オブジェクト名.mixinのプロパティ;
オブジェクト名.mixinのメソッド();

継承したmixinのプロパティ・メソッドはスーパークラス同様に使用できます。

void main() {
  var duck = Duck();
  duck.meWho();
  duck.canWalk();
  duck.canSwim();
  duck.canFly();
}

class Duck extends Animal with Walker, Swimmer, Flyer {
  Duck() : super('duck');
}

class Animal {
  String name;
  Animal(this.name);

  void meWho() {
    print('I am ${this.name}');
  }
}

mixin Walker {
  void canWalk() {
    print('I can walk');
  }
}

mixin Swimmer {
  void canSwim() {
    print('I can swim');
  }
}

mixin Flyer {
  void canFly() {
    print('I can fly');
  }
}

//結果
//I am duck
//I can walk
//I can swim
//I can fly

関連チートシートはこちら

効率的にFlutterを学習したい方は世界最大級のオンライン学習サイトUdemyがオススメ。

最安1200円から独学でスキルアップを目指せます!

\ サンプル動画・30日間返金保証あり /

  • URLをコピーしました!
目次
閉じる