Created
June 23, 2020 12:31
-
-
Save aryzae/542b9a3489715a3df3625ede44489f51 to your computer and use it in GitHub Desktop.
Flutter勉強会3回目の問題(mixin)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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