【发布时间】:2019-10-31 14:11:20
【问题描述】:
我正在尝试使用命名构造函数继承 dart 类,并且我想使用 super 和命名构造函数通过子类将数据传递到父类。
我尝试了很多变体,但这应该根据文档工作。我正在使用 Dart 2.0。注意:如果我有一个参数而不是命名构造函数,它可以工作。
class Person {
String firstname;
String lastname;
String city;
//empty constructor
Person();
//named constructors
Person.setfirstlast(String firstname, String lastname);
//setters and getters ...
}
class Worker extends Person{
String company;
String title;
double salary;
String _memo;
//empty constructor
Worker(){
_memo = "Great Worker";
}
//create named constructor - WHY WILL SUPER.setfirstlast NOT WORK?
Worker.setWorkerInfo( this.company, this.title, this.salary) :
super.setfirstlast(firstname, lastname)
{
_memo = "Great Worker";
}
//setters and getters ...
}
这是错误信息。
字符串名字
中只能访问静态成员initializers.dart(implicit_this_reference_in_initializer)
字符串姓氏
中只能访问静态成员initializers.dart(implicit_this_reference_in_initializer)
提前致谢!
** 答案**
对于那些感兴趣的人,我找到了解决方案,这就是您编写代码的方式。 Dart 有声明构造函数而不是继承,但也包括 super。
1 分钟的解释是,您实际上是在子级中创建了一个新的构造函数,其中包括来自基类的字段。请注意,您对子字段使用“this”,并在实际构造函数中为继承的字段使用数据类型和占位符。在这种情况下,字符串 fn 和字符串 ln。占位符然后通过 super 带来。
Worker.setWorkerInfo( this.company, this.title, this.salary, String fn, String ln) :
super.setfirstlast(fn, ln)
{
_memo = "Great Worker";
}
【问题讨论】:
-
Worker.setWorkerInfo从哪里得到firstname和lastname?
标签: inheritance dart super