我想指定一个不会更改测试默认值的构造函数。
因此,应打印“test text”而不是null
。
void main() async {
print(B().text);
}
class A{
A({this.text = "test text"});
final text;
}
class B extends A{
B({String text}) : super(text: text);
}
dartpad这可能吗?
最佳答案
不是这样的。如果编写构造函数,则无法以任何方式自动获取父类(super class)构造函数的默认值,并且必须将参数传递给超构造函数,或者不将其传递给初始化程序列表。它不能依赖于子类构造函数的参数值。因此,您必须再次编写父类(super class)构造函数参数默认值。
您可以做的一件事(我不建议您仅这样做)是,如果子类构造函数的参数与父类(super class)构造函数的参数完全相同,则可以在mixin
中声明子类的成员,然后子类是mixin应用程序。
所以代替:
class SuperClass {
SuperClass(...args) : ...
...
}
class SubClass extends SuperClass {
SubClass(...args) : super(...args);
members() ...
}
你做:class SuperClass {
SuperClass(...args) : ...
...
}
mixin _SubClass on SuperClass {
members() ...
}
class SubClass = SuperClass with _SubClass;
这将为SubClass
为每个父类(super class)构造函数提供一个构造函数,并使用相同的参数(包括默认值)将其直接转发给父类(super class)构造函数。不要这样做只是为了避免再次写入默认值!
关于dart - 如何使构造函数使用与super相同的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64706484/