1、如果没有自定义构造方法,则会有个默认的构造方法
2、如果存在自定义构造方法,则默认构造方法无效
3、构造方法不能重载
void main() {
var person = new Person("Tom", 20, "Male");
}
class Person {
String name;
int age;
final String gender;
//1.
// Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
//2.
// Person(this.name, this.age) {
// print("name=====>" + name);
// }
//3.
Person(this.name, this.age, this.gender);
void work() {
print("Work....");
}
}
4、使用命名构造方法,可以实现多个构造方法,使用类名.方法的形式实现
Person.withName(String name) {
this.name = name;
}
调用:
new Person.withName("Java");
5、常量构造方法
1)如果类是不可变状态,可以把对象定义为编译时常量
2)使用const声明构造方法,并且所有变量都为final
3)使用const声明对象,可以省略
void main() {
const person = /*const可省略*/ const Person("Tom", 20, "Male");
person.work();
}
class Person {
final String name;
final int age;
final String gender;
const Person(this.name, this.age, this.gender);
void work() {
print("Work....");
}
}
6、工厂构造方法
1)工厂构造方法类似于设计模式中的工厂模式
2)在构造方法前添加关键字factory实现一个工厂构造方法
3)在工厂构造方法中可以返回对象
class Logger {
final String name;
static final Map<String, Logger> _cache = <String, Logger>{};
factory Logger(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final logger = Logger._internal(name);
return logger;
}
}
Logger._internal(this.name);
void log(String msg) {
print(msg);
}
}