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);
}
}