Я пытаюсь унаследовать класс 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 ...
}
Вот сообщение об ошибке.
String firstname В
* 1009 могут быть доступны только статические члены*
Строка фамилия Доступ к статическим членам возможен только в
initializers.dart(implicit_this_reference_in_initializer)
Заранее спасибо!
** Ответ **
Для тех, кто заинтересованЯ нашел решение, и вот как вы его кодируете.Дарт утверждает, что конструкторы не наследуются, но также включают в себя супер.
1-минутное объяснение состоит в том, что вы по сути создаете в конструкторе новый конструктор, который включает в себя поля из базового класса.Обратите внимание, что вы используете «this» для дочерних полей и используете тип данных и заполнители для унаследованных полей в фактическом конструкторе.В этом случае String fn и String ln.Затем заполнители переносятся через супер.
Worker.setWorkerInfo( this.company, this.title, this.salary, String fn, String ln) :
super.setfirstlast(fn, ln)
{
_memo = "Great Worker";
}