Mixin application is processed from left to right.
The superclass of Object with A,B,C
is Object with A,B
, which again has the superclasses Object with A
and then Object
.
The overriding rules for mixins are the same as for non-mixin superclasses. Your C.foo
in Mix
overrides the ones inherited from A
and B
, so Mix.bar
's super.foo()
only reaches the C.foo
, and there is no way to access A.foo
or B.foo
.
Overriding is perfectly ok, and doesn't cause any warnings, as long as the methods have compatible signatures.
The most thorough description of mixins is still https://www.dartlang.org/articles/mixins/