Dart 中的抽象方法
Abstract methods in Dart
我正在实现一个继承层次结构,其中 derived-class 构造仅包含对 base-class 构造函数的调用。然后 base-class 构造函数调用仅在 derived-class.
中实现的方法
我有一个基本的实现,但 DartEditor 当然会抱怨基础 class 中缺少方法。怎样才能让它开心?
编辑:在发布我的问题之前我还没有 运行 任何代码,事实证明方法绑定以人们期望的方式工作:
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()
。但是因为为 B
定义了一个 x()
,所以这个叫做:
B.x
A.y
有趣的是,虽然 x()
被 A
的构造函数调用,但 Dart 不知何故知道调用 B
的 x()
。我认为这是因为调用链大致如下所示:
B() -> A() -> B::x()
在运行时,Dart 检查调用链以确定绑定到哪个对象 x()
。
根据你的问题,我希望代码是这样的
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');
}
中尝试
根据您关于出现错误的评论,我认为您在基础 class 中没有抽象方法存根。
也许这就是您要找的
void main() {
new B();
}
@proxy
abstract class A {
A() {
a();
b();
c();
}
}
class B extends A {
B() : super();
a() => print('a');
b() => print('b');
c() => print('c');
}
我正在实现一个继承层次结构,其中 derived-class 构造仅包含对 base-class 构造函数的调用。然后 base-class 构造函数调用仅在 derived-class.
中实现的方法我有一个基本的实现,但 DartEditor 当然会抱怨基础 class 中缺少方法。怎样才能让它开心?
编辑:在发布我的问题之前我还没有 运行 任何代码,事实证明方法绑定以人们期望的方式工作:
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()
。但是因为为 B
定义了一个 x()
,所以这个叫做:
B.x
A.y
有趣的是,虽然 x()
被 A
的构造函数调用,但 Dart 不知何故知道调用 B
的 x()
。我认为这是因为调用链大致如下所示:
B() -> A() -> B::x()
在运行时,Dart 检查调用链以确定绑定到哪个对象 x()
。
根据你的问题,我希望代码是这样的
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');
}
中尝试
根据您关于出现错误的评论,我认为您在基础 class 中没有抽象方法存根。 也许这就是您要找的
void main() {
new B();
}
@proxy
abstract class A {
A() {
a();
b();
c();
}
}
class B extends A {
B() : super();
a() => print('a');
b() => print('b');
c() => print('c');
}