一、標(biāo)準(zhǔn)構(gòu)造方法
Dart中所有的類都繼承于Object
// 默認(rèn)繼承于Object類(extends Object)
class Person {
String name;
int age;
// 構(gòu)造方法,快捷鍵 (control+enter)->constructor
Person(this.name, this.age);
// 重寫父類的toString方法
@override
String toString() {
// TODO: implement toString
return 'name:$name, age:$age';
}
}
// 創(chuàng)建Person子類擂找,并初始化構(gòu)造方法铅祸。在類的內(nèi)部創(chuàng)建的帶有下劃線的變量為該類的私有變量,外界無(wú)法訪問,{}內(nèi)部的參數(shù)為可選參數(shù)患雇,在初始化時(shí)可不初始化,其余參數(shù)在初始化時(shí)為必填參數(shù)
class Student extends Person {
String _school; // 私有變量
String city; // 可選參數(shù)
String country; // 默認(rèn)參數(shù),不賦值時(shí)為默認(rèn)值
Student(this._school, String name, int age,{this.city, this.country = '中國(guó)'}) : super(name, age);
}
二宇挫、命名構(gòu)造方法
// 命名構(gòu)造方法:類名+.方法名苛吱,如果繼承于父類,要初始化父類的初始化方法
// 使用命名構(gòu)造方法為類實(shí)現(xiàn)多個(gè)構(gòu)造方法
// 命名構(gòu)造方法也可以有自己的方法體
class Student extends Person {
Student.init(Student stu) : super(stu.name, stu.age){
// 命名構(gòu)造方法的方法體
print('命名構(gòu)造方法');
}
三器瘪、工廠構(gòu)造方法
// 他不僅是一種構(gòu)造方法翠储,還是一種模式
// 相當(dāng)于一個(gè)單例對(duì)象
class Logger{
static Logger _logger;
// factory工廠命名構(gòu)造方法
factory Logger() {
if (_logger == null) {
_logger = Logger._internal(); // 一般初始化一個(gè)私有的構(gòu)造方法
}
return _logger;
}
Logger._internal(); // 私有構(gòu)造方法
}
void func() {
Logger log1 = Logger();
Logger log2 = Logger();
print('---------------');
print(log1==log2);
print('---------------');
}
// 打印結(jié)果
四、命名工廠構(gòu)造方法
// 適用于在數(shù)據(jù)請(qǐng)求中援所,將數(shù)據(jù)轉(zhuǎn)化為模型
// 命名工廠構(gòu)造方法 :factory 類名+.方法名(參數(shù),可自定義)
// 他可以有返回值欣除,而且不需要將類的final變量作為參數(shù),是提供一種靈活獲取類對(duì)象的方式
factory Student.init(Student stu) {
return Student(stu._school, stu.name, stu.age);
}
五、setter&&getter方法
// 我們可以為私有變量設(shè)置getter方法讓外界獲取到私有變量
// get方法
String get school => _school;
// set方法
set school(String value) {
_school = value;
}
六杠娱、靜態(tài)方法
// 參數(shù)自定義,可傳可不傳
static doSomething(){
print('++++++');
}
// 使用
類名.doSomething();