从 Dart 中的子类初始化最终字段

gbe*_*ger 5 dart

这不起作用:

abstract class Par {
  final int x;
}

class Sub extends Par {
  Sub(theX) {
    this.x = theX;
  }
}
Run Code Online (Sandbox Code Playgroud)

我在 Par 中收到一个错误,说 x 必须被初始化:

warning: The final variable 'x' must be initialized
warning: 'x' cannot be used as a setter, it is final
Run Code Online (Sandbox Code Playgroud)

gbe*_*ger 6

给超类一个构造函数,并进行子类调用super

abstract class Par {
  final int x;
  Par (int this.x) {}
}

class Sub extends Par {
  Sub(theX) : super(theX)
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样将构造函数设为私有,因为以开头的方法和字段_在 Dart 中是私有的

abstract class Par {
  final int x;
  Par._(int this.x) {}
}

class Sub extends Par {
  Sub(theX) : super._(theX)
}
Run Code Online (Sandbox Code Playgroud)