我正在实现一个继承层次结构,其中派生类构造只包含对基类构造函数的调用。然后,基类构造函数调用仅在派生类中实现的方法。
我有一个基本的实现,但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()
定义了B
,因此名为:
B.x
A.y
值得注意的是,虽然x()
的构造函数正在调用A
,但Dart却知道要调用B
的{{1}}。我认为这是因为调用链看起来大致如下:
x()
在运行时,Dart会检查调用链以确定要绑定的对象B() -> A() -> B::x()
。
答案 0 :(得分:1)
从你的问题我希望这样的代码
console.log
试试DartPad
从你关于获取错误的评论我希望你没有基类中的抽象方法存根。 也许这就是你要找的东西
void main() {
new B();
}
abstract class A {
A() {
a();
b();
c();
}
a();
b();
c();
}
class B extends A {
B() : super();
@override
a() => print('a');
@override
b() => print('b');
@override
c() => print('c');
}