不多說了上代碼?酢!坷檩!
///定義一個(gè)Dart類却音,所有的類都繼承自O(shè)bject,并且都是默認(rèn)繼承的矢炼,所以不需要使用extends
class Person {
String name;
int ages;
///標(biāo)準(zhǔn)的構(gòu)造方法
Person(this.name, this.ages);
///多態(tài)的體現(xiàn)系瓢,重載
@override
String toString() {
return 'name:$name,age$ages';
}
}
class Student extends Person {
String _school; //通過_(下劃線)來標(biāo)識(shí)私有字段(變量)
String city;
String country;
String name;
///可以為私有字段設(shè)置getter來讓外界獲取到私有字段
String get school =>_school;
///可以為私有字段設(shè)置setter來控制外界對(duì)私有字段的修改
set schllo(String value){
_school=value;
}
//靜態(tài)方法
static doPrint(String str){
print("doPrint:$str");
}
///構(gòu)造方法:
///通過this._school初始化自有參數(shù)
///name,age交給父類進(jìn)行初始化
///city為可選參數(shù)
///country為默認(rèn)參數(shù)
Student(this._school, String name, int ages,
{this.city, this.country = "China"})
: //初始化列表:除了調(diào)用父類構(gòu)造器句灌,載子類構(gòu)造器方法體之前夷陋,你也可以額初始化實(shí)例變量,不同的初始化變量之間用逗號(hào)分隔開
name = '$country.$city',
//如果父類沒有默認(rèn)構(gòu)造方法(無參數(shù)的構(gòu)造方法)胰锌,則需要載初始化列表中調(diào)用父類的構(gòu)造方法進(jìn)行初始化
super(name, ages){
print('構(gòu)造方法體不是必須的骗绕,也就是{}里面的,這樣只是簡(jiǎn)化了初始時(shí)的工作');
}
@override
String toString() {
return 'Student{name: $name} ${this._school},city:$city,country:$country ${super.toString()}';
}
///命名構(gòu)造方法:[類名.方法名]
///使用命名構(gòu)造方法為類實(shí)現(xiàn)多個(gè)構(gòu)造方法
Student.cover(Student student):super(student.name,student.ages){
print('命名構(gòu)造方法');
}
///命名工廠構(gòu)造方法:factory【類名.方法名】
///它可以有返回值资昧,而且不需要將類的final變量作為參數(shù)(在命名構(gòu)造方法中final修飾的變量就必須進(jìn)行初始化)酬土,是提供一種靈活獲取對(duì)象的方式
factory Student.stu(Student student){
return Student(student._school, student.name, student.ages);
}
}
class Logger{
//創(chuàng)建靜態(tài)實(shí)例
static Logger _cache;
//工廠構(gòu)造方法都會(huì)使用factory關(guān)鍵字進(jìn)行標(biāo)識(shí),工廠構(gòu)造方法一般用于返回唯一類的實(shí)例
factory Logger(){
if(_cache==null){
_cache=Logger._internal();
}
return _cache;
}
//下面也是構(gòu)造方法的一種格带,只是私有化了而已
Logger._internal();
void log(String msg){
print(msg);
}
}
///使用abstract修飾符來定義一個(gè)抽象類撤缴,該類不能被實(shí)例化
abstract class Study{
void study();
}
//繼承抽象類就要實(shí)現(xiàn)它的抽象方法
class StudyFlutter extends Study{
@override
void study() {
print('Learning Flutter');
}
}
///為類添加特征:mixins
///mixins 是在多個(gè)類層次結(jié)構(gòu)中重用代碼的一種方式
///要是用mixins,在with關(guān)鍵字后面跟上一個(gè)或多次mixins的名字(用逗號(hào)分開)叽唱,并且with要用在extends的后面
///mixins的特征:實(shí)現(xiàn)mixins腹泌,就創(chuàng)建一個(gè)繼承Object類的子類(不能繼承其他類),不聲明任何構(gòu)造函數(shù)尔觉,不調(diào)用super
///Study就是mixins
class Test extends Person with Study{
Test(String name, int ages) : super(name, ages);
@override
void study() {
// TODO: implement study
}
}