Oop 在Dart中扩展抽象类是否会为子类提供另一个构造函数

Oop 在Dart中扩展抽象类是否会为子类提供另一个构造函数,oop,dart,abstract-class,Oop,Dart,Abstract Class,我创建了一个带有最终变量的抽象类,因为我需要在其中创建一个构造函数来实例化变量。是否将此构造函数添加到扩展抽象类的所有类中?我不这么认为,因为我的一些子类将有额外的最终变量需要实例化。如果是这种情况,抽象类的构造函数扮演什么角色 供参考: 抽象类超类{ 最后一个字符串项 超类(项) :项目=项目; } 类子类{ 最后一个字符串项 最终字符串项2 子类(项目,项目2) :项目=项目, 第2项=第2项; } 在这种情况下,扩展是最好的选择,如果是,会看到超类的构造函数吗?在您的情况下,抽象类只是一

我创建了一个带有最终变量的抽象类,因为我需要在其中创建一个构造函数来实例化变量。是否将此构造函数添加到扩展抽象类的所有类中?我不这么认为,因为我的一些子类将有额外的最终变量需要实例化。如果是这种情况,抽象类的构造函数扮演什么角色

供参考:

抽象类超类{
最后一个字符串项
超类(项)
:项目=项目;
}
类子类{
最后一个字符串项
最终字符串项2
子类(项目,项目2)
:项目=项目,
第2项=第2项;
}

在这种情况下,扩展是最好的选择,如果是,会看到超类的构造函数吗?

在您的情况下,抽象类只是一个普通类,因为它没有任何抽象属性/方法。唯一不能做的事情就是创建该抽象类的实例。 扩展超类是有意义的,因为您不再需要定义在超类中声明的字段,如“item”字段

为了从中受益,您需要编写稍微不同的子类:

抽象类超类{
最后的字符串项;
超类(此项);
}
类子类扩展了超类{
最终字符串项2;
子类(stringitem,this.item2):super(item);
}

请注意,子类构造函数调用超类的构造函数并将项值传递给它。但是,您仍然必须在子类的构造函数中声明项值;否则,您将没有机会初始化它,这是必需的,因为它是超类中的最终类。

在您的示例中,抽象类只是一个普通类,因为它没有任何抽象属性/方法。唯一不能做的事情就是创建该抽象类的实例。 扩展超类是有意义的,因为您不再需要定义在超类中声明的字段,如“item”字段

为了从中受益,您需要编写稍微不同的子类:

抽象类超类{
最后的字符串项;
超类(此项);
}
类子类扩展了超类{
最终字符串项2;
子类(stringitem,this.item2):super(item);
}

请注意,子类构造函数调用超类的构造函数并将项值传递给它。但是,您仍然必须在子类的构造函数中声明项值;否则,您将没有机会初始化它,这是必需的,因为它在超类中是最终的。

是的,这也解释了超类构造函数的用途。所以它不一定在子类中创建新的构造函数,我只需要确保在某个点调用超类的构造函数。太棒了,谢谢。@joshpetit,谢谢你的编辑。我想明确指出,在子类中仍然需要构造函数。因为唯一可以调用超级构造函数的地方是子类的构造函数,你必须调用超级构造函数。是的,我理解,谢谢!我想知道只有一个字段的同一个构造函数是否会被传递给子类,但它不是如您所示,我们只需要确保按照您所说的调用超类。谢谢是的,这也解释了超类构造函数的用途。所以它不一定在子类中创建新的构造函数,我只需要确保在某个点调用超类的构造函数。太棒了,谢谢。@joshpetit,谢谢你的编辑。我想明确指出,在子类中仍然需要构造函数。因为唯一可以调用超级构造函数的地方是子类的构造函数,你必须调用超级构造函数。是的,我理解,谢谢!我想知道只有一个字段的同一个构造函数是否会被传递给子类,但它不是如您所示,我们只需要确保按照您所说的调用超类。谢谢