Skip to content

Instantly share code, notes, and snippets.

@sho-ito-1027
Created June 23, 2020 12:31
Show Gist options
  • Save sho-ito-1027/542b9a3489715a3df3625ede44489f51 to your computer and use it in GitHub Desktop.
Save sho-ito-1027/542b9a3489715a3df3625ede44489f51 to your computer and use it in GitHub Desktop.
Flutter勉強会3回目の問題(mixin)
void main() {
Impreza1 car1 = Impreza1();
Impreza2 car2 = Impreza2();
Impreza3 car3 = Impreza3();
Impreza4 car4 = Impreza4();
Impreza5 car5 = Impreza5();
}
mixin Fly on FutureCar {
void fly() {}
}
mixin Swim {
void swim() {}
}
abstract class CarObject {
String name;
void accelerate();
void stop();
}
class Car implements CarObject {
String name;
void accelerate() {}
void stop() {}
}
class FutureCar extends CarObject {
String name;
void accelerate() {}
void stop() {}
}
// Carクラスのサブクラス。
// mixinを問題なく適用できるのでOK
// ① OK
class Impreza1 extends Car with Swim {
void accelerate() {}
void stop() {}
}
// Carクラスのサブクラスではなくinterfaceを実装しているだけ。
// SwimはCarに適用されるがImpreza2には適用されず、構文エラーのような状態?
// ② NG
class Impreza2 implements Car with Swim {
String name = 'Impreza2';
void accelerate() {}
void stop() {}
}
// FutureCarクラスのサブクラスではなくinterfaceを実装しているだけ。
// Flyの制約が満たされないのでNG
// ③ NG
class Impreza3 implements FutureCar with Fly, Swim {
String name = 'Impreza3';
void accelerate() {}
void stop() {}
}
// FutureCarクラスのサブクラス。
// FutureCarクラスにFlyとSwimのmixinを適用しているので条件は満たしている
// ④ OK
class Impreza4 extends FutureCar with Fly, Swim {
String name = 'Impreza4';
void accelerate() {}
void stop() {}
void soundHorn() {}
}
// Impreza5クラスにSwimのmixinが適用され、Carのinterfaceを実装が必須となっている
// 実装は条件を満たしているのでOK
// ⑤ OK
class Impreza5 with Swim implements Car {
String name = 'Impreza5';
void accelerate() {}
void stop() {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment