java中dart類詳細講解
dart 是一個面向對象的語言;面向對象有
- 繼承
- 封裝
- 多態
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(); // 觸發命名構造函數 }
8.dart修飾符
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);//調用的時候直接通過訪問屬性的方式訪問方法 }
10.dart 中的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 我們這直接通過屬性獲取值 }
11.在實例化之前,給類內部初始化數值
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 我們這直接通過屬性獲取值 }
到此這篇關於dart類詳細講解的文章就介紹到這瞭,更多相關dart類講解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Android開發Dart Constructors構造函數使用技巧整理
- 微信小程序movable-view的可移動范圍示例詳解
- Python基礎詳解之描述符
- Golang異常處理之defer,panic,recover的使用詳解
- Flutter 語法進階抽象類和接口本質區別詳解