(Обратите внимание, что связанная статья устарела и не относится к Dart 2.)
Идея миксинов заключается в том, что «миксин» - это разница между классом и его суперклассом.
Для класса K
это различие - все в его сокращении после предложения extends:
implements I, J {
int thrice(x) => 3* x;
}
Когда вы затем создаете новый класс A
, применяя этот миксин к другому классу, B
, как class A = B with K;
, тогда результирующий класс становится по существу:
class A extends B implements I, J {
int thrice(x) => 3* x;
}
Этот класс реализует интерфейсы I
и J
и имеет метод twice
, унаследованный от B
, и метод thrice
, смешанный с K
.
(Этот пример недопустим в Dart 2. В Dart 2 вы не можете извлечь интерфейс из объявления класса с суперклассом, отличным от Object
. Чтобы объявить миксин, который имеет понятие суперкласса, Вы должны использовать объявление mixin
:
mixin K on S implements I, J {
int thrice(int x) => 3* x;
}
class B implements S {
int twice(int x) => 2 * x;
}
class A = B with K;
).