Dart 如何实现在mixin上使用的类?
以下代码来自Dart 如何实现在mixin上使用的类?,dart,Dart,以下代码来自 class音乐家{} 混音音乐家{}上的音乐表演者 班歌手兼音乐表演者{} 医生说: 在前面的代码中,只有扩展或实现Musitor类的类才能使用mixin MusicalPerformer 但是,如果我执行实现部分,我会得到一个编译错误: class SingerDancer implements Musician with MusicalPerformer {} // Compile error 如果希望实现,应执行以下操作: class SingerPerformer im
class音乐家{}
混音音乐家{}上的音乐表演者
班歌手兼音乐表演者{}
医生说:
在前面的代码中,只有扩展或实现Musitor类的类才能使用mixin MusicalPerformer
但是,如果我执行实现
部分,我会得到一个编译错误:
class SingerDancer implements Musician with MusicalPerformer {} // Compile error
如果希望
实现
,应执行以下操作:
class SingerPerformer implements Musician, MusicalPerformer {}
编辑:
musicalperformer
取决于超类musier
SingerPerformer
不是Musitor
的子类,但将实现其接口。因此,SingerPerformer
不能使用mixin,但它也可以实现其接口
第二次编辑:
您也可以这样做:
class NewMusician implements Musician {}
class NewPerformer extends NewMusician with MusicalPerformer {}
当您混入mixin时,mixin应用程序的超类必须实现mixin的
要求。超类是带
的之前的类
类SingerDancer通过MusicalPerformer{}
扩展music,因为超类music
实现了接口music
,因此您可以对其应用MusicalPerformer
如果您有课程:
类SingerDancer实现音乐家{…}
然后您可以对其应用MusicalPerformer
:
class SingerDancerPerformer=带音乐表演者的歌手dancer;
然而,当你写作时:
class SingerDancer与音乐表演者实现音乐家{}
零件的顺序不对。如果允许的话,这可能意味着
class SingerDancer与MusicalPerformer实现音乐家{}
阿卡
类SingerDancer使用MusicalPerformer实现Musitor{}扩展对象
(如果在使用
的之前省略扩展X
,则它是隐式的扩展对象
,就像在没有使用
的类上省略扩展X
)。
这里,mixin应用程序的超类不实现music
。
这也是不允许的,因为类声明中的implements
不能在extensed
/with
之前出现
带有
的之前的类必须满足mixin的要求(对于多个mixin,如用M1扩展X,M2
,M2
之前的类是带有M1的mixin应用程序X)。,我想实现类而不是混入。我编辑了答案,但文档注释说了些别的,不是吗?我不明白这是如何回答这个问题的。你能重读一遍吗?谢谢,但是,答案对我来说并不容易理解。(1) “音乐家,实现(平凡的)接口音乐家”——在这句话中,你想说“音乐家,拥有(平凡的)接口音乐家”。(2) class SingerDancer with MusicalPerformer
是否意味着我已经在实施(implements
)音乐家
课程+1尽管如此!Ad(1),是的,music
类实现/具有许多接口,可以直接声明,也可以继承。其中一个接口是类自己的接口。因此music
类实现了music
接口(从技术上讲,这是两个独立的东西)。Ad(2)class SingerDancer with MusicalPerformer…
不是有效的声明,因为mixin应用程序with MusicalPerformer
的超类是隐式扩展对象
,而MusticalPerformer
需要一个musier
作为超类。因为它不是有效的Dart,所以不可能说出它的意思。如果你有类X扩展了Y和MuscialPerformer{}
,并且它是有效的(意思是Y
实现了音乐家
),那么X
也实现了音乐家
,MuscialPerformer
,Y
和Object
接口(以及任何其他接口Y
碰巧有)。