版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
HarmonyOS鴻蒙應(yīng)用開發(fā)授課:課程團(tuán)隊(duì)項(xiàng)目三目錄03特殊操作符02抽象類和接口01類04異步執(zhí)行05導(dǎo)入和導(dǎo)出模塊類01類03方法02構(gòu)造方法01字段04訪問修飾符05繼承機(jī)制什么是類?
類(Class)是面向?qū)ο缶幊讨械囊粋€(gè)基本概念,它作為創(chuàng)建對象的藍(lán)圖或模板,定義了一組特定的字段和方法。
類可以被看作一個(gè)模板,用于制造具有相同特征和行為的對象(Object)。class類名{
字段
構(gòu)造方法
方法}類的字段字段是直接在類中聲明的某種類型的變量。字段實(shí)例字段靜態(tài)字段實(shí)例字段存在于類的每個(gè)實(shí)例上,每個(gè)實(shí)例都有自己的實(shí)例字段集合。實(shí)例字段必須在定義時(shí)初始化或者在構(gòu)造方法中初始化。調(diào)用格式為:實(shí)例.字段名。使用關(guān)鍵字static將字段聲明為靜態(tài)字段。靜態(tài)字段屬于類本身,類的所有實(shí)例共享一個(gè)靜態(tài)字段。要訪問靜態(tài)字段,需要使用類名,調(diào)用格式為:類名.字段名。0102實(shí)例字段靜態(tài)字段類的
實(shí)例字段
和
靜態(tài)字段輸出:字段權(quán)限控制
在面向?qū)ο缶幊讨校幌M苯釉L問實(shí)例字段,可通過將字段設(shè)置為private(私有)來拒絕外部直接訪問,轉(zhuǎn)由getter(讀?。┖蛃etter(設(shè)置)控制字段的訪問。構(gòu)造方法
構(gòu)造方法用于實(shí)例化類,從而得到對象,在構(gòu)造方法內(nèi)部往往初始化相關(guān)字段。
在前面的銀行賬戶案例中,通過代碼letaccount=newBankAccount()創(chuàng)建類的實(shí)例(也叫類的對象),實(shí)際上是在調(diào)用類的無參構(gòu)造方法。constructor([參數(shù)列表]){
//初始化操作}無參構(gòu)造方法在類中如果沒有顯式地定義構(gòu)造方法,則系統(tǒng)會默認(rèn)提供一個(gè)無參構(gòu)造方法。有參構(gòu)造方法當(dāng)在類中顯式地定義構(gòu)造方法時(shí),該類默認(rèn)的無參構(gòu)造方法失效。方法在面向?qū)ο缶幊讨?,函?shù)被稱為方法。在類中可以定義實(shí)例方法或者靜態(tài)方法。靜態(tài)方法屬于類本身,只能訪問靜態(tài)字段。實(shí)例方法既可以訪問靜態(tài)字段,又可以訪問實(shí)例字段。(1)實(shí)例方法
實(shí)例方法必須通過對象進(jìn)行調(diào)用,調(diào)用格式為:實(shí)例名.方法名()。(2)靜態(tài)方法
使用關(guān)鍵字static將方法聲明為靜態(tài)方法。
靜態(tài)方法定義了類作為一個(gè)整體的公共行為,調(diào)用格式為:
類名.方法名()。靜態(tài)方法和實(shí)例方法代碼示例實(shí)戰(zhàn)操作假設(shè)有一個(gè)汽車制造廠,每輛汽車都遵循同一套設(shè)計(jì)圖紙(類),同時(shí)每輛汽車都是獨(dú)立的實(shí)體(對象),擁有自己的顏色、型號等屬性,并且能夠執(zhí)行相同的操作,如啟動、行駛等,利用類的相關(guān)知識實(shí)現(xiàn)上述過程。訪問修飾符前面已學(xué)過,通過將字段設(shè)置為private訪問修飾符,可使字段無法在類外部被訪問。訪問修飾符用于控制類成員(字段和方法)的可見性和訪問權(quán)限。public:公開的,可被繼承,可以在任何地方訪問。缺省時(shí)的默認(rèn)修飾符。private:私有的,不可被繼承,只能在定義它的類內(nèi)部訪問。protected:受保護(hù)的,可被繼承,可以在定義它的類及其子類的內(nèi)部訪問。改造之前的銀行賬戶系統(tǒng)BankAccount,賬戶持有人可以查看余額(public),但只有系統(tǒng)內(nèi)部可以修改賬戶的交易記錄(private)。如果賬戶持有人需要修改賬戶設(shè)置,則需要通過受保護(hù)的方法(protected)來實(shí)現(xiàn),這些方法可以由賬戶持有人或銀行員工調(diào)用。繼承機(jī)制
類的繼承是面向?qū)ο缶幊讨凶钪匾母拍钪?,它是指一個(gè)類可以從現(xiàn)有的類中派生而來,它允許開發(fā)者根據(jù)一個(gè)類來定義另一個(gè)類,可以將一個(gè)類中的操作和數(shù)據(jù)結(jié)構(gòu)提供給另一個(gè)類,使得創(chuàng)建和維護(hù)程序變得更容易,同時(shí)有利于復(fù)用代碼和節(jié)省開發(fā)時(shí)間。繼承的關(guān)鍵字是extends。class
類A
extends
類B
{}通過繼承,子類可以把父類中除構(gòu)造方法、私有字段、私有方法以外的字段和方法都繼承下來。子類要調(diào)用父類的方法或構(gòu)造方法,可以使用關(guān)鍵字super。子類對父類方法進(jìn)行重寫,則需要使用關(guān)鍵字override。實(shí)戰(zhàn)操作
在團(tuán)隊(duì)中,每個(gè)人都扮演著重要的角色,共同為實(shí)現(xiàn)目標(biāo)貢獻(xiàn)力量。這種協(xié)作精神不僅體現(xiàn)了集體的力量,也展現(xiàn)了個(gè)人與團(tuán)隊(duì)的和諧統(tǒng)一。
下面通過定義:父類TeamMember(團(tuán)隊(duì)成員)子類Developer(開發(fā)者)子類Designer(設(shè)計(jì)師)
展示如何在代碼中體現(xiàn)團(tuán)隊(duì)協(xié)作、團(tuán)隊(duì)分工及個(gè)性化貢獻(xiàn)。抽象類和接口02多態(tài)
多態(tài)是面向?qū)ο缶幊痰暮诵母拍钪?,它允許不同的對象對同一消息做出響應(yīng),但具體的行為會根據(jù)對象的實(shí)際類型而有所不同。抽象類和接口是實(shí)現(xiàn)多態(tài)的兩種方式。抽象類
抽象類是面向?qū)ο缶幊讨械囊环N結(jié)構(gòu),它不能被直接實(shí)例化,通常被用作父類。
抽象類可以包含抽象方法,這些抽象方法只定義了名稱和參數(shù),而沒有具體的實(shí)現(xiàn)。
抽象類的非抽象子類必須實(shí)現(xiàn)抽象父類的抽象方法。
抽象類和抽象方法都需要被關(guān)鍵字abstract修飾。//抽象類abstract
class
抽象類名{
字段
構(gòu)造方法
具體方法
//抽象方法,不能有方法實(shí)現(xiàn)。待子類實(shí)現(xiàn)
abstract抽象方法名([若干參數(shù)]):返回值類型;}抽象方法:沒有具體實(shí)現(xiàn)的方法,它們定義了子類必須遵循的規(guī)范。子類實(shí)現(xiàn):子類通過提供抽象方法的具體實(shí)現(xiàn),展示了多態(tài)。這意味著同名的方法可以在不同的子類中有不同的行為。實(shí)戰(zhàn)操作
通過定義抽象類Animal和FourFeetAnimal,定義具體類Dog和Cat,演示如何通過抽象類實(shí)現(xiàn)多態(tài)。接口接口定義了一組方法,但不提供實(shí)現(xiàn)。實(shí)現(xiàn)接口的類必須提供所有方法的具體實(shí)現(xiàn)。接口的定義需要使用關(guān)鍵字interface,接口不能包含任何方法的實(shí)現(xiàn)。與抽象類不同的是,接口方法不能被關(guān)鍵字abstract修飾。與類繼承只能單繼承不同,一個(gè)類允許實(shí)現(xiàn)多個(gè)接口。interface接口名{
字段名:字段類型;
方法名([參數(shù)列表]):返回類型;}
方法:接口確保實(shí)現(xiàn)它的類遵循特定的結(jié)構(gòu)。
多態(tài)實(shí)現(xiàn):當(dāng)不同的類實(shí)現(xiàn)同一個(gè)接口時(shí),方法可以有不同的實(shí)現(xiàn),這體現(xiàn)了多態(tài)。接口Dog類實(shí)現(xiàn)了兩個(gè)接口:Animal和Swimmable。這意味著Dog類必須提供Animal接口中的makeSound方法和Swimmable接口中的swim方法的具體實(shí)現(xiàn)。通過實(shí)現(xiàn)Swimmable接口,Dog類擴(kuò)展了功能,現(xiàn)在它不僅能發(fā)出聲音,還能游泳。接口
接口除為類提供可擴(kuò)展性之外,還常被用來定義數(shù)據(jù)結(jié)構(gòu)。相較于類,接口更適合用于定義純數(shù)據(jù)結(jié)構(gòu),原因在于接口無具體的方法實(shí)現(xiàn),在編譯后將無運(yùn)行時(shí)開銷,且支持多重繼承,有利于數(shù)據(jù)結(jié)構(gòu)的擴(kuò)展。特殊操作符03特殊操作符03空值賦值運(yùn)算符02空值合并操作符01可選操作符04非空斷言操作符為何要引入特殊操作符?在實(shí)際編程時(shí),經(jīng)常需要處理可能不存在的屬性或變量,即項(xiàng)目二中介紹的類型中的null或undefined。為了簡化代碼并減少運(yùn)行時(shí)的錯(cuò)誤,ArkTS引入了幾個(gè)特殊操作符,幫助開發(fā)者以更安全、更直觀的方式處理這些情況??蛇x操作符(?)空值合并操作符(??)空值賦值運(yùn)算符(??=)非空斷言操作符(?。┛蛇x操作符(?)“可選”是一個(gè)用于描述值可能不存在的概念,它在類型系統(tǒng)中用于表示某些值在運(yùn)行時(shí)可能不會被提供??蛇x操作符允許讀取位于對象鏈(對象鏈指通過連續(xù)的點(diǎn)操作符訪問嵌套對象屬性的層級路徑,如obj.a.b.c)深處的屬性的值,而不必明確驗(yàn)證對象鏈中的每個(gè)引用是否有效(有效即不為undefined或null),在引用無效的情況下不會引起錯(cuò)誤,直接返回。interfaceDay{
num:number}interfaceCourseInfo{
professor:string
cfu:number
//定義字段時(shí),在字段名后加可選操作符,表示days是一個(gè)可選字段
days?:Array<Day>|undefined|null}letcourse:CourseInfo|undefined//用可選操作符安全地訪問深層屬性professor。由于course值為undefined,直接輸出:undefinedconsole.log(course?.professor);course={
professor:'張教授',
cfu:4,
days:undefined}//使用可選操作符安全地訪問深層屬性,course值不為undefined或null,輸出:張教授console.log(course?.professor);//使用可選操作符安全地訪問深層屬性,由于days值為undefined,直接輸出:undefinedconsole.log(course?.days?.length.toString());空值合并操作符(??)
空值合并操作符(??)是一個(gè)邏輯操作符,當(dāng)其左側(cè)的操作數(shù)為null或者undefined時(shí),返回其右側(cè)的操作數(shù),否則返回其左側(cè)的操作數(shù)。constnullValue=null;
//空字符串,是一個(gè)假值,Boolean("")===falseconstemptyText="";constvalA=nullValue??"valA的默認(rèn)值";constvalB=emptyText??"valB的默認(rèn)值";
//輸出"valA的默認(rèn)值"console.log(valA);
//輸出""(空字符串雖然是假值,但不是null或者undefined)console.log(valB);空值賦值運(yùn)算符(??=)
當(dāng)空值賦值運(yùn)算符(??=)左側(cè)變量的值為null或undefined時(shí),右側(cè)變量的值會被賦給左側(cè)變量。在一些場景下,使用空值賦值運(yùn)算符可以省略很多代碼。letb='hello';leta='0';b??=a;//b的值仍然是'hello'letc:string|null=null;letd='123';c??=d;//c的值變?yōu)?123'非空斷言操作符(!)
非空斷言操作符(!)用于告訴編譯器某個(gè)位置的值肯定不是null或undefined,通常在開發(fā)者確信某個(gè)位置的值不會是null或undefined時(shí)使用。interfaceUser{
name:string;
age?:number;//age是一個(gè)可選字段}//定義一個(gè)值可能為undefined的變量letuser:User|undefined={
name:"小紅",};//使用非空斷言操作符console.log(user!.name);//輸出:小紅//嘗試訪問可選屬性ageconsole.log(user!.age!.toString());//程序?qū)?bào)錯(cuò)異步執(zhí)行04什么是異步執(zhí)行
代碼按照順序往下執(zhí)行,前序任務(wù)完成才能執(zhí)行后序任務(wù),這樣的執(zhí)行機(jī)制叫同步(Synchronous)執(zhí)行,其優(yōu)點(diǎn)是邏輯清晰易調(diào)試,但會導(dǎo)致阻塞問題;為此引入異步(Asynchronous)執(zhí)行機(jī)制,異步執(zhí)行允許程序在等待耗時(shí)操作(如網(wǎng)絡(luò)請求或文件讀寫)時(shí)不停止執(zhí)行,轉(zhuǎn)而繼續(xù)執(zhí)行后續(xù)任務(wù),從而提升效率和響應(yīng)性。ArkTS通過Promise和async/await提供基礎(chǔ)異步并發(fā)能力。PromisePromise是一個(gè)用于處理異步操作的類,可以將異步操作轉(zhuǎn)換為類似同步操作的風(fēng)格,以方便代碼編寫和維護(hù)。
Promise提供了一個(gè)狀態(tài)機(jī)制來管理異步操作的不同階段,并提供了一些方法來注冊回調(diào)函數(shù)以處理異步操作結(jié)果。Promise對象有3種狀態(tài):pending(進(jìn)行中)、fulfilled(已完成)和rejected(已拒絕)。
Promise對象創(chuàng)建后處于pending狀態(tài),并在異步操作完成后轉(zhuǎn)換為fulfilled或rejected狀態(tài)。newPromise<T>(executor:(resolve:(value:T)=>void,reject:(reason?:any)=>void)=>void)
上述Promise構(gòu)造方法中的<T>表示泛型(Generics),泛型機(jī)制提供了編譯時(shí)類型檢查,它確保代碼使用正確的類型,減少需要進(jìn)行的顯式類型轉(zhuǎn)換。構(gòu)造方法的參數(shù)executor為一個(gè)帶有兩個(gè)參數(shù)的函數(shù)。參數(shù)resolve和reject分別表示異步操作成功和失敗時(shí)應(yīng)該調(diào)用的方法。resolve方法傳遞的參數(shù)的類型受泛型<T>約束,reject方法傳遞的參數(shù)通常為Error或其子類。Promise代碼示例//resolve和reject兩個(gè)回調(diào)函數(shù)constpromise:Promise<number>=newPromise((resolve:Function,reject:Function)=>{
setTimeout(()=>{
constrandomNumber:number=Math.random();
if(randomNumber>0.5){
//resolve回調(diào)函數(shù)會返回一個(gè)狀態(tài)為fulfilled的Promise對象
resolve(randomNumber);
}else{
//reject函數(shù)回調(diào)會返回一個(gè)狀態(tài)為rejected的Promise對象
reject(newError('數(shù)字太小了'));
}},1000);})promise.then((result:number)=>{
console.info(`隨機(jī)數(shù)是:${result}`);}).catch((error:Error)=>{
console.error(`錯(cuò)誤信息:`+erro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5G+醫(yī)學(xué)教育學(xué)習(xí)共同體的實(shí)踐策略研究
- 2025年四川省岳池銀泰投資(控股)有限公司公開招聘急需緊缺專業(yè)人才備考題庫帶答案詳解
- 首都醫(yī)科大學(xué)附屬北京胸科醫(yī)院2026年派遣崗位招聘31人備考題庫及完整答案詳解1套
- 九年級上冊第五單元單元解讀課件
- 2025年中國人民人壽保險(xiǎn)股份有限公司那曲市中心支公司招聘8人備考題庫完整參考答案詳解
- 2026屆西北鋁業(yè)有限責(zé)任公司秋季招聘18人備考題庫及完整答案詳解一套
- 2025年保定安國市興華中學(xué)教師招聘18人備考題庫及一套參考答案詳解
- 3D打印個(gè)性化脊柱創(chuàng)傷的早期固定策略
- 2025年陜西郵政招聘備考題庫附答案詳解
- 2025年蔡甸區(qū)公立小學(xué)招聘教師備考題庫及一套完整答案詳解
- 食品加工項(xiàng)目可行性研究報(bào)告
- 工程材料知到智慧樹章節(jié)測試課后答案2024年秋中國石油大學(xué)(華東)
- 鍍鋅鋼管供貨及售后服務(wù)方案
- 鋼板樁支護(hù)施工方案完整版
- 攪拌車包月合同模板
- 2020海灣DH-GSTN5208測溫式電氣火災(zāi)監(jiān)控探測器安裝使用說明書
- 音樂與健康智慧樹知到期末考試答案2024年
- 國開電大《人文英語4》一平臺機(jī)考總題庫珍藏版
- 人教部編版語文七年級上冊1-5單元測試卷含答案
- 風(fēng)電機(jī)安裝安全管理規(guī)定
- 北京林業(yè)大學(xué) 研究生 學(xué)位考 科技論文寫作 案例-2023修改整理
評論
0/150
提交評論