Dart中的抽象方法

时间:2015-06-15 22:11:22

标签: inheritance dart dart-editor abstract-methods

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

我有一个基本的实现,但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()

1 个答案:

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