Dart关于父类子类中构造函数的一些事情
Dart中,类的重载是一个小特点,不允许同名的构造函数。放到继承中,一开始就出现点问题。
比如如下代码:
class Animal {
int age;
//构造函数
Animal() {}
Animal.fromAge(int age) {
this.age = age;
}
void eating() {
print("在吃东西");
}
}
Animal中,定义了无参构造函数,那么带参数构造函数,就只能用命名构造方法。
接下来:
class Person extends Animal {
String name;
//构造函数
// 因为父类有无参数的,非命名的构造函数,
// 所以可以不用手动调用父类的构造函数
Person.fromName(String name) {
this.name = name;
}
//双参数构造函数
Person(this.name, int age) : super.fromAge(age);
@override
void eating() {
print("$name在吃东西");
}
}
默认的构造函数,是调用父类的传年龄的构造函数。
那么,只给名字的构造函数,就必须用命名构造方法创建。
main(List<String> args) {
final p = Person.fromName("p1");
print(p);
final p2 = Person("why", 17);
print(p2);
}
输出结果:
name:p1 age:null
name:why age:17
来回捣腾 命名构造函数,感觉很容易出错。必须规范代码编写才行。