直到我研究的内容,在Dart中你必须在构造函数的函数体外调用super。
假设出现这种情况:
/// Unmodifiable given class
class Figure{
final int sides;
const Figure(this.sides);
}
/// Own class
class Shape extends Figure{
Shape(Form form){
if(form is Square) super(4);
else if(form is Triangle) super(3);
}
}
抛出分析错误(超类没有0参数构造函数&表达式super(3)没有评估函数,因此无法调用它)。我怎样才能实现该示例的所需功能?
答案 0 :(得分:3)
在Dart中调用超级构造函数时,使用初始化列表。
class Shape extends Figure{
Shape(Form form) : super(form is Square ? 4 : form is Triangle ? 3 : null);
}
如果你需要执行语句,可以添加一个工厂构造函数,转发给(私有)常规构造函数,如
class Shape extends Figure{
factory Shape(Form form) {
if (form is Square) return new Shape._(4);
else if(form is Triangle) return new Shape._(3);
}
Shape._(int sides) : super(sides)
}