请查看代码,我想知道 1.谁是C超 2.在C类中,当我调用'super.method()'时,Mixin执行'void method()'(所以C的super是Mixin?),然后当执行'super.method()'时,B执行' void method()'(所以C的超级是B?),为什么?
它正在运行Dart 2.1.2
void main() {
C().printSuper();
C().method();
}
abstract class A {
void method() {
print("A");
}
}
class B implements A {
@override
void method() {
print("B");
}
}
mixin Mixin on A {
@override
void method() {
super.method();
print("mixin");
}
}
class C extends B with Mixin {
void printSuper() {
super.method();
}
}
print message:
I/flutter (21340): B
I/flutter (21340): mixin
I/flutter (21340): B
I/flutter (21340): mixin
我希望输出打印消息:
I /颤振(21340):B I /颤振(21340):B I / flutter(21340):混入
答案 0 :(得分:0)
C
的超类是B with Mixin
,它是extends B with Mixin
子句引入的匿名类。
类C
等效于声明如下的类:
class _BwithMixin extends B implements Mixin {
void method() {
super.method();
print("mixin");
}
}
class C extends _BwithMixin {
void printSuper() {
super.method();
}
}
因此,printSuper
不会直接命中method
的{{1}},而是命中了B
的超类{{{ 1}},而该方法就是从method
复制的方法。然后它将从C
调用B with Mixin
,并且它的超类是Mixin
,因此它将首先打印super.method()
,然后打印_BwithMixin
。