java中dart類詳細(xì)講解
dart 是一個(gè)面向?qū)ο蟮恼Z(yǔ)言;面向?qū)ο笥?/p>
- 繼承
- 封裝
- 多態(tài)
dart的所有東西都是對(duì)象,所有的對(duì)象都是繼承與object類
一個(gè)類通常是由屬性和方法組成的
在dart中如果你要自定義一個(gè)類的話,將這個(gè)類放在main函數(shù)外面
類名使用大駝峰方法名使用小駝峰
1.定義這個(gè)類的屬性和方法
//定義一個(gè)類的屬性和方法 class Person { String name = '張三'; int age = 19; void getInfo() { // print('我叫$name,今年$age');第一種 //推薦使用這樣的寫(xiě),通過(guò)this去訪問(wèn) print("${this.name}====${this.age}"); } } //使用類中的屬性和方法 void main() { // 調(diào)用Perso這個(gè)類 首先需要實(shí)例化這個(gè)類 // Person p = new Person(); // 等價(jià) var p=new Person var p = new Person(); print(p.age); p.getInfo(); }
2 .改變類中的屬性和方法
class Person { String name = '張三'; int age = 19; void getInfo() { //推薦使用這樣的寫(xiě)法 print("${this.name}====${this.age}"); } //限制類型,更改類中的屬性和方法 SetUserinfo(int age) { this.age = age; } } void main() { // 調(diào)用Perso這個(gè)類 首先需要實(shí)例化這個(gè)類 Person p = new Person(); // 等價(jià) var p=new Person print(p.age);//19 p.getInfo();//張三====19 p.SetUserinfo(100); p.getInfo();//張三====100 }
3.默認(rèn)構(gòu)造函數(shù)
class Person { //這是一個(gè)默認(rèn)構(gòu)造函數(shù) Person() { print('默認(rèn)構(gòu)造函數(shù)里面的內(nèi)容,該方法在實(shí)例化的時(shí)候會(huì)自動(dòng)出發(fā)哈'); } } void main() { // 實(shí)例化的時(shí)候,會(huì)自動(dòng)觸發(fā)默認(rèn)構(gòu)造函數(shù) Person p = new Person(); // 等價(jià) var p=new Person }
4. 動(dòng)態(tài)傳遞,類多次實(shí)例化,打印不同的值
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() { // 實(shí)例化的時(shí)候,會(huì)自動(dòng)觸發(fā) Person p = new Person('張三', 10); // 等價(jià) var p=new Person p.getuserInfo(); //這個(gè)類可以實(shí)例化多次的哈 Person v = new Person('張三1', 100); // 等價(jià) var p=new Person v.getuserInfo(); }
5.默認(rèn)構(gòu)造函數(shù)簡(jiǎn)寫(xiě)
class Person { String name; int age; // Person(String name, int age) { // this.name = name; // this.age = age; // } //上面注釋的代碼等價(jià)于 Person(this.name, this.age); Person(this.name, this.age); void getuserInfo() { print(this.name); print(this.age); } }
6.命名構(gòu)造函數(shù),命名構(gòu)造函數(shù)是可以寫(xiě)多個(gè)的;但是默認(rèn)構(gòu)造函數(shù)只能寫(xiě)一個(gè)
class Person { //我是默認(rèn)的構(gòu)造函數(shù) Person() { print('我是默認(rèn)的構(gòu)造函數(shù)'); } // 命名構(gòu)造函數(shù) Person.mynow() { print('我是命名構(gòu)造函數(shù)'); } } void main() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Person p = new Person(); // 等價(jià) var p=new Person Person v = new Person.mynow(); // 觸發(fā)命名構(gòu)造函數(shù) }
7.類抽離出去,單獨(dú)放一個(gè)文件夾中
在項(xiàng)目的根目錄創(chuàng)建一個(gè)文件夾 lib 在lib文件夾中創(chuàng)建一個(gè)文件 xxx.dart內(nèi)容如下 class Person { //我是默認(rèn)的構(gòu)造函數(shù) Person() { print('我是默認(rèn)的構(gòu)造函數(shù)'); } // 命名構(gòu)造函數(shù) Person.mynow() { print('我是命名構(gòu)造函數(shù)'); } } 在需要的某個(gè)文件中引入 import 'lib/xxx.dart'; void main() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Person p = new Person(); // 等價(jià) var p=new Person Person v = new Person.mynow(); // 觸發(fā)命名構(gòu)造函數(shù) }
8.dart修飾符
dart和其他面向?qū)ο蟮恼Z(yǔ)言不一樣。沒(méi)有向public private 這樣的訪問(wèn)修飾符
但是我們可以使用_把一個(gè)屬性或者方法定義成私有的,(就是在變量或者方法的前面添加_;并且要單獨(dú)把他抽離出去變成一個(gè)文件 放在lib目錄下,這樣外面就不能夠訪問(wèn)了);
但是個(gè)人覺(jué)得這種沒(méi)有實(shí)質(zhì)的意義 如果要訪問(wèn)這個(gè)私有的方法,那么在類種添加一個(gè)共有的方法;去訪問(wèn)這個(gè)私有的方法;訪問(wèn)在return回去; 就可以訪問(wèn)這個(gè)私有的方法了 私有方法,只有在當(dāng)前類中訪問(wèn)哈 在lib目錄下的animal.dart文件;
內(nèi)容如下
class Animal { String _name = 'dog';//這是私有的方法,只當(dāng)前這個(gè)類可以訪問(wèn);其他類是不能夠訪問(wèn)的哈~; // 如果非要訪問(wèn)這個(gè)類,可以通過(guò)共有方法來(lái)訪問(wèn) // 通過(guò)公共方法來(lái)訪問(wèn)這個(gè)類;間接訪問(wèn) getName(){ print(this._name); } int age = 19; void getInfo() { //推薦使用這樣的寫(xiě)法 print("${this._name}====${this.age}"); } //限制類型,更改類中的屬性和方法 SetUserinfo(int age) { this.age = age; } }
9. 計(jì)算矩形的面積將他改為get方法
class Rect { num width; num height; Rect(this.width, this.height); getUserINfo() { return (this.width * this.height); } } void main() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Rect p = new Rect(10, 4); // 等價(jià) 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() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Rect p = new Rect(10, 4); // print(p.getUserINfo()); // 將上面的代碼改為get方法的調(diào)用 print(p.getUserINfo);//調(diào)用的時(shí)候直接通過(guò)訪問(wèn)屬性的方式訪問(wèn)方法 }
10.dart 中的set 方法
class Rect { num width; num height; Rect(this.width, this.height); // 設(shè)置值的時(shí)候。我們使用了set方法 set areaHeight(value) { this.height = value; } get area { return this.height; } } void main() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Rect p = new Rect(10, 4); p.areaHeight = 6; //當(dāng)一個(gè)類的內(nèi)部使用了set方法的時(shí)候。我們直接使用賦值; print(p.area); //內(nèi)部使用了get 我們這直接通過(guò)屬性獲取值 }
11.在實(shí)例化之前,給類內(nèi)部初始化數(shù)值
class Rect { num width; num height; // 在實(shí)例化之前,給類內(nèi)部初始化數(shù)值 Rect() : height = 2, width = 10 {} get area { return this.height * this.width; } } void main() { // 實(shí)例化的時(shí)候,會(huì)默認(rèn)構(gòu)造自動(dòng)觸發(fā) Rect p = new Rect(); print(p.area); //內(nèi)部使用了get 我們這直接通過(guò)屬性獲取值 }
到此這篇關(guān)于dart類詳細(xì)講解的文章就介紹到這了,更多相關(guān)dart類講解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用SpringSecurity設(shè)置角色和權(quán)限的注意點(diǎn)
這篇文章主要介紹了使用SpringSecurity設(shè)置角色和權(quán)限的注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案
這篇文章主要介紹了spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案,需要的朋友可以參考下2019-08-08詳解Java如何在業(yè)務(wù)代碼中優(yōu)雅的使用策略模式
這篇文章主要為大家介紹了Java如何在業(yè)務(wù)代碼中優(yōu)雅的使用策略模式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解下2023-08-08SpringBoot配置數(shù)據(jù)庫(kù)密碼加密的方法
由于系統(tǒng)安全的考慮,配置文件中不能出現(xiàn)明文密碼的問(wèn)題,本文就給大家詳細(xì)介紹下springboot配置數(shù)據(jù)庫(kù)密碼加密的方法,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧,需要的朋友可以參考下2023-08-08通過(guò)java字節(jié)碼分析學(xué)習(xí)對(duì)象初始化順序
今天用了jmock對(duì)進(jìn)行單元測(cè)試編碼,發(fā)現(xiàn)一個(gè)比較奇怪的語(yǔ)法,static使用方法,見(jiàn)下面例子2013-11-11Java if(boolean)和if(boolean=true)區(qū)別解析
這篇文章主要介紹了Java if(boolean)和if(boolean=true)區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02詳解SpringBoot restful api的單元測(cè)試
本篇文章主要介紹了詳解SpringBoot restful api的單元測(cè)試,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09spring cloud實(shí)現(xiàn)前端跨域問(wèn)題的解決方案
這篇文章主要介紹了 spring cloud實(shí)現(xiàn)前端跨域問(wèn)題的解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01