飞镖类继承:如何将父级的所有财产分配给孩子

时间:2019-03-03 09:33:33

标签: inheritance dart

我有两个班级:PersonStudentStudent扩展了Person。当Person注册为Student时,将归属Student的新属性。我想将人的所有属性传递给学生。为此,我创建了一个自定义构造函数:Student.fromPerson(Person person)但是,类Person具有很多专有性,当开发人员向Person添加专有性时,他们还必须在Student中更新此构造函数。有没有一种方法可以自动将人的属性归于其超类,因为它是同一类型而无需编写:: super(fname: person.fname, lname: person.lname);并列出所有属性?

class Person {
  String fname;
  String lname;

  Person({this.fname, this.lname});
}

class Student extends Person {
  String major;
  String year;

  Student({this.major, this.year, String fname, String lname})
      : super(fname: fname, lname: lname);

  Student.fromPerson(Person person, {this.major, this.year})
      : super(fname: person.fname, lname: person.lname); // <- is there a better way

}

void main() {
  Person person = Person(fname: "Lina", lname: "Dosse");
    Student student = Student.fromPerson(person, major: 'CS', year: '2015');
}

1 个答案:

答案 0 :(得分:0)

没有任何一种方法可以在任何地方使用。在VM上,您可以使用dart:mirrors来反映Person的字段,但这在Web上或颤动中均不起作用。您还可以使用codegen生成可复制到字段中的样板代码,但是我不知道任何现有的构建器都可以执行此操作,因此您需要自己实现它。 (如果您想尝试此路线,请参见https://github.com/dart-lang/build/tree/master/docs

更好的方法可能是更改模型。可以不用Student is Person来建模,而可以尝试Student has Person

class Student {
    Person person;
    String major;
    String year;

    Student({this.person, this.major, this.year});
}