Dart 米辛阴影
假设我有这样的代码:Dart 米辛阴影,dart,Dart,假设我有这样的代码: A类{foo()=>“A”} 类B{foo()=>“B”;} 类C{foo()=>“C”} 类混合扩展了A和B,C{ foo()=>“混合”; bar()=>super.foo(); } 类MessABC=带有A、B、C的对象; 类MessBCA=带有B、C、A的对象; MessCAB类=带有C、A、B的对象; void main(){ 混合=新的混合(); MessABC mABC=新MessABC(); MessBCA mBCA=新MessBCA(); MessCAB
A类{foo()=>“A”}
类B{foo()=>“B”;}
类C{foo()=>“C”}
类混合扩展了A和B,C{
foo()=>“混合”;
bar()=>super.foo();
}
类MessABC=带有A、B、C的对象;
类MessBCA=带有B、C、A的对象;
MessCAB类=带有C、A、B的对象;
void main(){
混合=新的混合();
MessABC mABC=新MessABC();
MessBCA mBCA=新MessBCA();
MessCAB mCAB=新MessCAB();
打印(“Mix.foo=${Mix.foo()}Mix.bar=${Mix.bar()}\n”
“mABC.foo=${mABC.foo()}\n”
“mBCA.foo=${mBCA.foo()}\n”
“mCAB.foo=${mCAB.foo()}\n”);
}
输出
Mix.foo=Mix.bar=CmABC.foo=C
mBCA.foo=A
mCAB.foo=B 在
mix
对象上,我可以使用super调用mix.foo
和C.foo
(实际上我希望A.foo
)
但是我能不能叫A.foo
和B.foo
另外,我对和语义有点困惑A、B、C
看起来像“一级枚举”,但顺序很重要。“飞镖编辑器”并没有提醒我名字冲突。也许我可以启用此警告
对我来说,这感觉像是让你们感到困惑和容易出错的事情。Mixin应用程序是从左到右处理的。 带有A、B、C的
对象的超类是带有A、B的对象
,它同样具有带有A的对象的超类,然后是对象
mixin的覆盖规则与非mixin超类的覆盖规则相同。Mix
中的C.foo
覆盖了从A
和B
继承的C.foo,因此Mix.bar
的super.foo()
只到达C.foo
,无法访问A.foo
或B.foo
重写是完全可以的,只要方法具有兼容的签名,就不会引起任何警告
对mixin最全面的描述仍然是