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 不知何故知道调用 Bx()。我认为这是因为调用链大致如下所示:

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

DartPad

中尝试

根据您关于出现错误的评论,我认为您在基础 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');
}