我正在实现一个继承层次结构,其中派生类构造仅包含对基类构造函数的调用。然后基类构造函数调用仅在派生类中实现的方法。
我有一个基本的实现,但 DartEditor 当然会抱怨基类中缺少方法。我怎样才能让它快乐?
编辑:在发布我的问题之前我还没有运行任何代码,结果证明方法绑定以人们期望的方式工作:
void main() {
new B();
}
abstract class A {
A() {
x();
y();
}
x() => print('A.x');
y() => print('A.y');
}
class B extends A {
B() : super();
@override
x() => print('B.x');
}
上面的代码输出以下内容,这是所需的行为。B
的构造函数调用调用A
的构造函数x()
。但由于有一个x()
定义 for B
,这就是所谓的:
B.x
A.y
有趣的是,虽然x()
被A
's 的构造函数调用,但 Dart 不知何故知道调用B
's x()
。我认为这是因为调用链大致如下所示:
B() -> A() -> B::x()
在运行时,Dart 检查调用链以确定要绑定到哪个对象x()
。