dart 是一個物件導向的語言;物件導向有 (1)繼承 (2)封裝 (3)多型
dart的所有東西都是物件,所有的物件都是繼承與object類
一個類通常是由屬性和方法組成的哈;
在dart中如果你要自定義一個類的話,將這個類放在main函式外面哈
類名使用大駝峰
方法名使用小駝峰
1 定義這個類的屬性和方法
//定義一個類的屬性和方法
class Person {
String name = '張三';
int age = 19;
void getInfo() {
// print('我叫$name,今年$age');第一種
//推薦使用這樣的寫,通過this去訪問
print("${this.name}====${this.age}");
}
}
//使用類中的屬性和方法
void main() {
// 呼叫Perso這個類 首先需要例項化這個類
// Person p = new Person(); // 等價 var p=new Person
var p = new Person();
print(p.age);
p.getInfo();
}
2 改變類中的屬性和方法
class Person {
String name = '張三';
int age = 19;
void getInfo() {
//推薦使用這樣的寫法
print("${this.name}====${this.age}");
}
//限制型別,更改類中的屬性和方法
SetUserinfo(int age) {
this.age = age;
}
}
void main() {
// 呼叫Perso這個類 首先需要例項化這個類
Person p = new Person(); // 等價 var p=new Person
print(p.age);//19
p.getInfo();//張三====19
p.SetUserinfo(100);
p.getInfo();//張三====100
}
3預設建構函式
class Person {
//這是一個預設建構函式
Person() {
print('預設建構函式裡面的內容,該方法在例項化的時候會自動出發哈');
}
}
void main() {
// 例項化的時候,會自動觸發預設建構函式
Person p = new Person(); // 等價 var p=new Person
}
4 動態傳遞,類多次例項化,列印不同的值
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void getuserInfo() {
print(this.name);
print(this.age);
}
}
void main() {
// 例項化的時候,會自動觸發
Person p = new Person('張三', 10); // 等價 var p=new Person
p.getuserInfo();
//這個類可以例項化多次的哈
Person v = new Person('張三1', 100); // 等價 var p=new Person
v.getuserInfo();
}
5預設建構函式簡寫
class Person {
String name;
int age;
// Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
//上面註釋的程式碼等價於 Person(this.name, this.age);
Person(this.name, this.age);
void getuserInfo() {
print(this.name);
print(this.age);
}
}
6命名建構函式,命名建構函式是可以寫多個的;但是預設建構函式只能寫一個
class Person {
//我是預設的建構函式
Person() {
print('我是預設的建構函式');
}
// 命名建構函式
Person.mynow() {
print('我是命名建構函式');
}
}
void main() {
// 例項化的時候,會預設構造自動觸發
Person p = new Person(); // 等價 var p=new Person
Person v = new Person.mynow(); // 觸發命名建構函式
}
7將類抽離出去,單獨放一個資料夾中
在專案的根目錄建立一個資料夾 lib
在lib資料夾中建立一個檔案 xxx.dart內容如下
class Person {
//我是預設的建構函式
Person() {
print('我是預設的建構函式');
}
// 命名建構函式
Person.mynow() {
print('我是命名建構函式');
}
}
在需要的某個檔案中引入
import 'lib/xxx.dart';
void main() {
// 例項化的時候,會預設構造自動觸發
Person p = new Person(); // 等價 var p=new Person
Person v = new Person.mynow(); // 觸發命名建構函式
}
8dart修飾符
dart和其他物件導向的語言不一樣。沒有向public private 這樣的訪問修飾符
但是我們可以使用_把一個屬性或者方法定義成私有的哈;
(就是在變數或者方法的前面新增_;並且要單獨把他抽離出去變成一個檔案 放在lib目錄下,這樣外面就不能夠訪問了);
但是個人覺得這種沒有實質的意義
如果要訪問這個私有的方法,那麼在類種新增一個共有的方法;去訪問這個私有的方法;訪問在return回去;
就可以訪問這個私有的方法了
私有方法,只有在當前類中訪問哈
在lib目錄下的animal.dart檔案;內容如下
class Animal {
String _name = 'dog';//這是私有的方法,只當前這個類可以訪問;其他類是不能夠訪問的哈~;
// 如果非要訪問這個類,可以通過共有方法來訪問
// 通過公共方法來訪問這個類;間接訪問
getName(){
print(this._name);
}
int age = 19;
void getInfo() {
//推薦使用這樣的寫法
print("${this._name}====${this.age}");
}
//限制型別,更改類中的屬性和方法
SetUserinfo(int age) {
this.age = age;
}
}
9 計算矩形的面積將他改為get方法
class Rect {
num width;
num height;
Rect(this.width, this.height);
getUserINfo() {
return (this.width * this.height);
}
}
void main() {
// 例項化的時候,會預設構造自動觸發
Rect p = new Rect(10, 4); // 等價 var p=new Person
print(p.getUserINfo());
}
將上面的程式碼改為get方法
class Rect {
num width;
num height;
Rect(this.width, this.height);
// getUserINfo() {
// return (this.width * this.height);
// }
// 將上面的程式碼該為get
get getUserINfo {
return (this.width * this.height);
}
}
void main() {
// 例項化的時候,會預設構造自動觸發
Rect p = new Rect(10, 4);
// print(p.getUserINfo());
// 將上面的程式碼改為get方法的呼叫
print(p.getUserINfo);//呼叫的時候直接通過訪問屬性的方式訪問方法
}
09dart 中的set 方法
class Rect {
num width;
num height;
Rect(this.width, this.height);
// 設定值的時候。我們使用了set方法
set areaHeight(value) {
this.height = value;
}
get area {
return this.height;
}
}
void main() {
// 例項化的時候,會預設構造自動觸發
Rect p = new Rect(10, 4);
p.areaHeight = 6; //當一個類的內部使用了set方法的時候。我們直接使用賦值;
print(p.area); //內部使用了get 我們這直接通過屬性獲取值
}
10在例項化之前,給類內部初始化數值
class Rect {
num width;
num height;
// 在例項化之前,給類內部初始化數值
Rect()
: height = 2,
width = 10 {}
get area {
return this.height * this.width;
}
}
void main() {
// 例項化的時候,會預設構造自動觸發
Rect p = new Rect();
print(p.area); //內部使用了get 我們這直接通過屬性獲取值
}