1.当前类没有实现任何构造函数时拥有一个默认的当前类名的无参数匿名构造函数。
class Person {
String? name;
}
Person类拥有一个Person()的无参数匿名构造函数。
2.手动实现一个构造函数:
class Person {
String? name;
Person(String? name);
}
2.1.手动实现构造函数后,默认无参数匿名构造函数即不可用。
2.2.构造函数种类
2.2.1.匿名有参数构造函数
class Person {
String? name;
Person(String? name);
}
2.2.2.命名构造函数
class Person {
String? name;
Person.initName(String? name);
}
2.2.3.重定向构造函数:重定向构造函数不能实现函数体。
class Person {
String? name;
Person.initName(String? name);
Person.redirect(String? name) : this.initName(this.name);
}
2.2.4.常量构造函数
class Person {
String? name;
const Person.initName(String? name);
}
2.2.5.工厂构造函数:需要调用其他的构造函数,且该构造函数返回的实例不一定是全新的实例,可能是由缓存中取出的实例。
class Person {
String? name;
Person.initName(String? name);
factory Person(String? name){
return Person.init(name);
}
}
3.子类的构造函数
3.1.当父类拥有匿名无参数构造函数时(父类没有实现其他构造函数),子类构造函数默认会滴爱用父类的匿名无参数构造函数。
3.2.子类不会继承父类的构造函数。
3.3.当父类手动实现构造函数时,子类需要调用父类的构造函数。 ```js class Child extends Person { bool isSon; Child(this.isSon) : super.initName(){
}
}
```
3.4.子类实现父类构造函数时的顺序:
- 初始化列表
- 父类的无参数构造函数
- 当前类的构造函数 子类的初始化列表会在父类的构造函数前被实现。