【发布时间】:2019-03-20 10:32:17
【问题描述】:
this article about Dart Mixins底部有一个例子:
class S {
twice(int x) => 2 * x;
}
abstract class I {
twice(x);
}
abstract class J {
thrice(x);
}
class K extends S implements I, J {
int thrice(x) => 3* x;
}
class B {
twice(x) => x + x;
}
class A = B with K;
文章接着说:
现在当我们定义 A 时,我们从 K 中得到 thrice() 的实现 混音。但是,mixin 不会为我们提供 两次()。幸运的是,B 确实有这样的实现,所以总体 A 确实满足I、J和S的要求。
我不明白 为什么 B 需要实现 twice。为什么K 的thrice 实现适用于B,但其继承的twice 实现却没有?
【问题讨论】:
-
我不认为它需要来实现它。你试过删除它吗?我认为是为了演示实际执行的是哪个实现。
-
"但是,mixin 不会为我们提供 two() 的实现。" - 在链接的文章中有详细说明
-
我用更多信息编辑了我的问题
-
文本已过期。您不能在 Dart 2 中将
K用作 mixin。在 Dart 1 中,从具有除Object之外的超类的类派生的 mixin,如K,将仅包含成员已声明在那个类中,所以只有thrice的声明,而不是从S继承的twice。A类是那个mixin对B、B with K的mixin应用,它扩展了BK扩展其超类的同一类主体(并且还需要B来实现S,因此这也不是有效的 Dart 1)。结果将是来自B的twice和来自K的thrice。