重复方法行为
The 代码,这里作为要点, https://dartpad.dartlang.org/10e4a4fe0cc01c7eb5ec926ff9a4cebb将打印e
。如果我删除覆盖,即删除output
from Baz
,它将打印w
from Bar
.
这使我得出结论,方法“优先级”是own class
->
mixin
->
super class
.
如果我添加更多 mixin,例如像这样:
mixin Zoo {
output() {
print('j');
}
}
class Baz extends Foo with Bar, Zoo {
// ...
现在,输出是j
。如果我换个位置Bar
and Zoo
:
class Baz extends Foo with Zoo, Bar {
// ...
现在,输出是w
again.
因此,我会这样定义优先级:own class
->
last mixin
->
nth-last mixin
->
super class
.
Question
我有什么办法吗control这种行为,即调用超级调用方法,即使mixin
有同名的方法吗?
Why
您可能会问为什么我要这样做,而不仅仅是重命名方法。
那么,在 Flutter 中所有State
有一个dispose
方法,如果我有一个mixin
具有dispose
方法也是如此,它会破坏State
的功能是因为mixin
's dispose
方法优先,如上所示。
补充笔记
super.output
也会调用 mixin 方法,这就是为什么它不起作用。您可以尝试添加以下构造函数Baz
:
Baz() {
super.output();
}
即使这有效,也无济于事,因为dispose
Flutter 情况下的方法是从外部调用的。