gpt4 book ai didi

inheritance - Dart 中的抽象方法

转载 作者:行者123 更新时间:2023-12-03 03:44:16 26 4
gpt4 key购买 nike

我正在实现一个继承层次结构,其中派生类构造仅包含对基类构造函数的调用。基类构造函数然后调用仅在派生类中实现的方法。

我有一个基本的实现,但 DartEditor 当然会提示基类中缺少方法。我怎样才能让它开心?

编辑:在发布我的问题之前我还没有运行任何代码,事实证明方法绑定(bind)以人们期望的方式工作:

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' s x()。我认为这是因为调用链大致如下所示:

B() -> A() -> B::x()

在运行时,Dart 检查调用链以确定绑定(bind)到哪个对象 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');
}

尝试 DartPad

根据您关于出现错误的评论,我认为您在基类中没有抽象方法 stub 。也许这就是您要找的东西

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');
}

关于inheritance - Dart 中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com