[Dart]mixinとは
mixinとは
class
で共通する機能を、継承を使ってmixさせる。
具体例
導入
Animal
クラスを作り、継承を使用してBird
とFish
クラスを作成する。
void main() {
Fish().move();
Bird().move();
}
class Animal {
void move() {
print('change position.');
}
}
class Fish extends Animal {
@override
void move() {
super.move();
print('by swimming.');
}
}
class Bird extends Animal {
@override
void move() {
super.move();
print('by flying.');
}
}
一見、Bird
とFish
クラスを美しく定義できているように見える。
しかし、泳ぎと飛ぶが両方できるアヒルクラスを作る際には上記の書き方では問題が出てくる。
Bird
とFish
クラスのどちらを継承させるのが適切か不明となる。
class Duck extends Bird {} //Birdを継承させるべき?
class Duck extends Fish {} //Fishを継承させるべき?
mixin
そこで、mixin
の登場!!
void main() {
Duck().swim();
Duck().fly();
}
...
mixin CanSwim {
void swim() {
print('can swim.');
}
}
mixin CanFly {
void fly() {
print('can fly.');
}
}
class Duck with CanSwim, CanFly {
}
mixin
によって共通する機能をどちらも継承することができる。
まとめ
mixin
で共通する機能を分離させて、with
で継承させる。
Author And Source
この問題について([Dart]mixinとは), 我々は、より多くの情報をここで見つけました https://qiita.com/higaki-takanori/items/09729879cfb9c50f2e6c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .