java 面向?qū)ο笳Z言.ppt_第1頁
java 面向?qū)ο笳Z言.ppt_第2頁
java 面向?qū)ο笳Z言.ppt_第3頁
java 面向?qū)ο笳Z言.ppt_第4頁
java 面向?qū)ο笳Z言.ppt_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java語言與JBuilder應(yīng)用初步第三章面向?qū)ο笳Z言 本章要點 類與對象成員變量與成員函數(shù)對象的初始化與構(gòu)造函數(shù)類的封裝性類的繼承性類的多態(tài)性抽象類與抽象函數(shù)類的靜態(tài)變量與靜態(tài)函數(shù) 類與對象 Java中的類在Java程序中 類是由定義和主體構(gòu)成的右圖是Java中一個完整的類 類與對象 完整的類定義格式 publicabstractfinalclass類名extends父類名implements接口名 類的主體 類定義中 必需的部分是 class 關(guān)鍵字和類的名字 其它部分都是可選的 成員變量與成員函數(shù) 成員變量成員變量的完整定義形式如下 accessLevelstaticfinaltransientviolatiletypename其中用黑體字標(biāo)的變量類型和變量名是必需項 其它都是可選項 成員變量與成員函數(shù) 成員變量name 成員變量名也是必需項 它的命名要求與普通變量名相同在一個類里 你不能定義兩個相同名稱的成員變量 但允許成員變量和成員函數(shù)起相同的名字 例如 publicclassCalculator publicdoublea b publicdoubleadd publicdoubleadd return a b 成員變量與成員函數(shù) 成員函數(shù)成員函數(shù)與類相似 是由函數(shù)定義和函數(shù)主體構(gòu)成的 如下圖所示 函數(shù)定義部分包括函數(shù)的訪問級 返回值的類型 函數(shù)名稱和參數(shù)列表函數(shù)主體是花括號里的部分 它包括實現(xiàn)函數(shù)功能所需要的代碼 成員變量與成員函數(shù) 成員函數(shù)能否在函數(shù)中改變參數(shù)的值publicclassTestSum publicvoidSum doublesumx doublex sumx sumx x publicstaticvoidmain String args TestSumaTest newTestSum doublesumx x sumx 0 x 3 aTest Sum sumx x System out println 累加結(jié)果為 sumx 成員變量與成員函數(shù) 成員函數(shù)publicclassTestStr publicvoidChangeString StringBufferOldStr StringBufferNewStr OldStr append NewStr publicstaticvoidmain String args TestStraStr newTestStr StringBufferStr1 newStringBuffer 新年 StringBufferStr2 newStringBuffer 快樂 aStr ChangeString Str1 Str2 System out println Str1 成員變量與成員函數(shù) 成員函數(shù)這種情況常出現(xiàn)于對象的構(gòu)造函數(shù)中 publicclassCircle publicintx y radius publicCircle intx inty intradius this x x 構(gòu)造函數(shù)的作用是為對象設(shè)定初值 因此函數(shù)的參數(shù)難免與成員變量重名 此時通過 this 就可以毫不費力地對二者進行區(qū)分 成員變量與成員函數(shù) 成員函數(shù)一個函數(shù)只能有一個返回值 publicdoubleSum doublex1 doublex2 doublesumx sumx x1 x2 returnsumx 函數(shù)地返回值可以賦給變量 doubley y Sum 5 3 成員變量與成員函數(shù) 成員函數(shù)對于帶返回值的函數(shù) Java語言要求從程序結(jié)構(gòu)上保證函數(shù)一定可以返回一個值為便于理解 考慮下面的例子 publicintTest if 7 5 return1 很明顯 7 5 永遠成立 因此 return1 語句一定會被執(zhí)行 函數(shù)一定有返回值但這段程序在編譯時不能通過 成員變量與成員函數(shù) 成員函數(shù)成員函數(shù)內(nèi)可以有 this super 對象 它們分別特指函數(shù)所屬對象本身和它的父類 成員變量與成員函數(shù) 成員函數(shù)函數(shù)定義的完整形式 其中黑體字的部分為必需項 accessLevelstaticabstractfinalnativesynchronizedreturnTypemethodName paramList throwsexceptions 對象的初始化與構(gòu)造函數(shù) 成員變量的初始化對象的成員變量是自動初始化的當(dāng)用new關(guān)鍵字來產(chǎn)生一個對象時 對象的所有成員變量都自動初始化 DemoClassaDemo newDemoClass 初始化的結(jié)果 整型 浮點型變量賦值為0字符型賦值為空邏輯型賦值為false引用變量賦值為空 不指向任何一個對象 對象的初始化與構(gòu)造函數(shù) 構(gòu)造函數(shù)構(gòu)造函數(shù)是一類特殊的成員函數(shù) 它的函數(shù)名與類名相同 沒有返回值 也不用將返回值類型設(shè)為void如果一個類有構(gòu)造函數(shù) 在構(gòu)造這個類的時候 將會自動調(diào)用構(gòu)造函數(shù)可以在構(gòu)造函數(shù)中對指定的變量賦初值 與直接賦初值相比 構(gòu)造函數(shù)靈活許多 并且不受變量先后次序的影響 對象的初始化與構(gòu)造函數(shù) 構(gòu)造函數(shù)一個類可以同時擁有幾個構(gòu)造函數(shù) 每個構(gòu)造函數(shù)的自變量不同 初始化對象時根據(jù)自變量的不同自動選擇合適的構(gòu)造函數(shù)例題 源代碼見教材 該例題中有三個構(gòu)造函數(shù) publicTree publicTree doubleHeight publicTree intAge 類的封裝性 封裝性與訪問級控制類的一個優(yōu)勢在于類可以保護它的成員變量和成員函數(shù)不會被其它對象隨意訪問到在Java程序里 可以為成員變量和函數(shù)設(shè)定四級訪問級 privateprotectedpublicpackage 類的繼承性 類的繼承的概念一個類可以從另一個類中繼承它的成員變量和函數(shù) 前者稱為子類 后者稱為父類 類的這種特點稱為繼承性類的繼承通過extends關(guān)鍵字來說明 extends關(guān)鍵字跟在類名稱后面 形式如下 classClassNameextendsFatherClassName 其中ClassName是子類名 FatherClassName是父類名 類的繼承性 類的繼承性的特點在Java中 一個類只能有一個父類Java只支持單繼承 而不支持多重繼承如果需要多重繼承 Java提供了一種接口技術(shù) 可以部分地實現(xiàn)多重繼承的功能 類的繼承性 類的繼承性的特點在Java中定義的所有類都直接或間接地是Object類的子類 以O(shè)bject類為根 所有Java類形成一棵類繼承樹 如下圖所示 類的繼承性 類的繼承性的特點子類可以繼承的部分 1 父類中公開級的成員 2 父類中保護級的成員 3 如果子類和父類在同一個包里 則子類繼承父類中缺省的包訪問級的成員 子類不能繼承的部分 1 父類中私有級的成員 2 如果不在同一個包里 則缺省級的成員 3 同名的成員函數(shù)或成員變量 類的繼承性 繼承中的構(gòu)造函數(shù)構(gòu)造函數(shù)是比較特殊的一類在繼承時 構(gòu)造函數(shù)不會被繼承 也不會被覆蓋父類和子類的構(gòu)造函數(shù)依然是獨立存在 并且分別發(fā)揮著作用 類的繼承性 classDrawing Drawing System out println Drawingconstructor publicclassCartoonextendsDrawing Cartoon System out println Cartoonconstructor publicstaticvoidmain String args Cartoonx newCartoon 類的繼承性 classBoardGame BoardGame inti System out println BoardGameconstructor publicclassChessextendsBoardGame Chess super 11 System out println Chessconstructor publicstaticvoidmain String args Chessx newChess 類的多態(tài)性 多態(tài)性的作用數(shù)據(jù)抽象 繼承性和多態(tài)性是面向?qū)ο缶幊趟枷氲幕咎匦远鄳B(tài)性將函數(shù)的功能與實現(xiàn)分開 也就是說 將 做什么 與 怎樣做 分開了 類的多態(tài)性 成員的覆蓋在類的繼承中 除了繼承來的父類成員外 子類也可以有自己的成員如果子類的某個成員變量或成員函數(shù)與父類的同名 子類的成員函數(shù)或成員變量將隱藏父類的同名成員 這稱為成員的覆蓋 classSuper intaNumber 10 classSubbieextendsSuper doubleaNumber 2 87 類的多態(tài)性 成員的覆蓋例 BoardGame及其子類的Play函數(shù) classBoardGame publicvoidPlay System out println Playaboardgame publicclassChessextendsBoardGame publicvoidPlay System out println Playachess 類的多態(tài)性 類的多態(tài)性如果用父類的變量指向子類 再調(diào)用同名的函數(shù) 會出現(xiàn)什么情況呢 BoardGameaBoard newChess aBoard Play 運行程序 顯示的結(jié)果是 Playachess 可見 父類的變量指向子類對象 在調(diào)用函數(shù)時 實際調(diào)用的仍然是子類的函數(shù) 這就是類的多態(tài)性 類的多態(tài)性 類的多態(tài)性這種調(diào)用過程稱為 后期綁定 前面涉及到的函數(shù)調(diào)用都是 前期綁定 編譯時就根據(jù)變量類型定好了所調(diào)用的函數(shù)后期綁定是在執(zhí)行的時候 再根據(jù)變量實際指向的對象類型 不是變量本身的類型 來決定所調(diào)用的函數(shù)利用后期綁定 一個函數(shù)調(diào)用語句可能不同類型的函數(shù) 這種現(xiàn)象就是多態(tài)性 類的多態(tài)性 函數(shù)的重載重載是指一個類的多個成員函數(shù)具有相同的名稱 但有不同的參數(shù) 類的多態(tài)性 publicvoidAdd Complexx1 Complexx2 realPart x1 realPart x2 realPart imagPart x1 imagPart x2 imagPart publicvoidAdd Complexx1 doublex2 realPart x1 realPart x2 imagPart x1 imagPart publicvoidAdd doublex1 Complexx2 realPart x1 x2 realPart imagPart x2 imagPart publicvoidAdd doublex1 doublex2 realPart x1 x2 imagPart 0 類的多態(tài)性 覆蓋 多態(tài)性與重載的區(qū)別重載 一個類中有多個函數(shù)有相同的名字 但參數(shù)不同 嚴格地說是參數(shù)類型列表不同 在調(diào)用這些函數(shù)時 Java根據(jù)調(diào)用時給出的參數(shù)自動選擇適當(dāng)?shù)暮瘮?shù)可以認為 在Java里 兩個函數(shù)名相同 不代表兩個函數(shù)相同 只有函數(shù)名和參數(shù)都相同的時候才是 真正 相同 類的多態(tài)性 覆蓋 多態(tài)性與重載的區(qū)別覆蓋和多態(tài)性就涉及到 真正 相同的函數(shù)之間的關(guān)系覆蓋 如果父類和子類的函數(shù)相同 當(dāng)你通過子類調(diào)用函數(shù)時 你所調(diào)用的就只是子類的函數(shù) 父類的函數(shù)被覆蓋了多態(tài)性 反過來 當(dāng)你通過父類調(diào)用函數(shù)時 如果變量所指向的是一個子類對象 那么所調(diào)的仍然是子類函數(shù) 這就是多態(tài)性 抽象類與抽象函數(shù) 抽象函數(shù)和抽象類的概念抽象函數(shù) 僅有定義 沒有具體實現(xiàn)的函數(shù)抽象類 含有抽象函數(shù)的類定義一個抽象類 需要在類的定義前面加上 abstract 關(guān)鍵字定義一個抽象函數(shù) 需要在函數(shù)定義的前面加上 abstract 關(guān)鍵字一個類如果被定義為抽象類 它就不能實例化 也就是說 不能有自己的對象 抽象類與抽象函數(shù) 抽象類的使用抽象化的Game類 publicabstractclassGame publicabstractvoidPlay publicabstractStringGetRule 可以定義抽象類的變量 但不能創(chuàng)建對象 GamemyGame 抽象類變量可以指向Game的子類 再利用多態(tài)性來調(diào)用子類的Play或GetRule函數(shù) 抽象類與抽象函數(shù) 抽象類的使用抽象函數(shù)的意義是沒有具體實現(xiàn)的函數(shù)它的作用就是被子類的相同函數(shù)覆蓋 或通過多態(tài)性指向子類的相同函數(shù)通過抽象函數(shù) 可以定義一整套完整的函數(shù)功能 再派生出若干子類來實現(xiàn)不同的子類可以以不同的形式實現(xiàn)這些功能 但函數(shù)形式是完全一致的抽象類必須有子類 不然就沒有意義 抽象類與抽象函數(shù) 抽象類的使用抽象類中不僅僅有抽象函數(shù) 也可以有普通的成員函數(shù)和成員變量但如果一個類中有抽象函數(shù) 那么這個類必須定義為抽象類如果一個類繼承了父類的幾個抽象函數(shù) 但沒有全部實現(xiàn) 如BoardGame類 那么這個類也必須定義為抽象類 類的靜態(tài)變量與靜態(tài)函數(shù) 靜態(tài)變量的概念靜態(tài)變量 又稱為類變量 是與對象的成員變量相對的一種變量靜態(tài)變量不屬于具體的對象 系統(tǒng)只為每個類分配一套類變量 而不管這個類產(chǎn)生了多少實例對象靜態(tài)變量用 static 關(guān)鍵字定義 所有的對象共享一套靜態(tài)變量 類的靜態(tài)變量與靜態(tài)函數(shù) 靜態(tài)變量的使用例題 TestClass類 classTestClass publicstaticinttestStatic 有兩種方法訪問靜態(tài)變量testStatic 通過對象訪問或用類直接訪問 TestClassaTest1 newTestClass TestClassaTest2 newTestClass aTest1 testStatic 12 aTest2 testStatic 5 TestClass testStatic 7 類的靜態(tài)變量與靜態(tài)函數(shù) 靜態(tài)函數(shù)的概念實例函數(shù) 只能通過對象調(diào)用 每個

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論