如何在构造函数体内调用super?

时间:2020-02-03 05:32:00

标签: flutter dart

class Foo {
  Foo(int y); 
}

class Bar extends Foo { 
  int value;

  Bar(int x) { // error in this line
    value = x;
    print("Hi there");
    super(x); // error in this line
  }
}

如何在构造函数体内调用super


注意:

我知道我可以使用初始化程序列表来解决它,但是我想知道如何在方法体内调用super

Bar(int x): value = x, super(x); // works but I am not looking for it. 

1 个答案:

答案 0 :(得分:2)

Dart不支持将构造方法作为显式可调用方法进行继承。您提到的初始化程序列表是在Dart中调用未命名的超级构造函数的受支持方法。

但是,您可以在命名构造函数的帮助下实现所需的目标。看下面的例子-

class Foo {
  int superValue;

  Foo(); //A default zero-argument constructor

  Foo._init(this.superValue); //Named constructor

  void initValue(int x) => Foo._init(x);
}

class Bar extends Foo { 
  int value;

  Bar(int x) {
    value = x;
    print("Hi there");
    super.initValue(x);
  }
}

void main() {
  Foo foo = Bar(10); //prints 'Hi there'
}

希望有帮助!

更新

您还可以调用超级构造函数,并使用这种方式将其他语句添加到子构造函数-

class Foo {
  int superValue;

  Foo(this.superValue);
}

class Bar extends Foo { 
  int value;

  Bar(int x) : super(x) {
    value = x;
    print("Hi there");
  }
}

void main() {
  Foo foo = Bar(10);
}
相关问题