JAVA編程基礎(chǔ)-06面向?qū)ο蟾呒壧匦訽第1頁
JAVA編程基礎(chǔ)-06面向?qū)ο蟾呒壧匦訽第2頁
JAVA編程基礎(chǔ)-06面向?qū)ο蟾呒壧匦訽第3頁
JAVA編程基礎(chǔ)-06面向?qū)ο蟾呒壧匦訽第4頁
JAVA編程基礎(chǔ)-06面向?qū)ο蟾呒壧匦訽第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

JAVA編程基礎(chǔ)

——面向?qū)ο蟾呒壧匦缘诹旅嫦驅(qū)ο蟾呒壧匦阅繕?biāo):

介紹Java中類的繼承,封裝,多態(tài),方法的覆蓋,抽象類、接口及內(nèi)部類等面向?qū)ο蟮母呒壧匦?。通過本課的學(xué)習(xí),學(xué)員應(yīng)該掌握如下知識:1)類的繼承、封裝、多態(tài)2)抽象類及接口3)引用數(shù)據(jù)類型的轉(zhuǎn)換4)訪問權(quán)限修飾符的使用5)final關(guān)鍵字教學(xué)方法:講授ppt+上機(jī)練習(xí)本章要點(diǎn)類的繼承繼承的規(guī)則子類的構(gòu)造器Java中的包和訪問修飾符方法的覆蓋引用數(shù)據(jù)類型的轉(zhuǎn)換向下轉(zhuǎn)型向上轉(zhuǎn)型多態(tài)特征動態(tài)綁定抽象類和接口定義抽象方法區(qū)別Final關(guān)鍵字內(nèi)部類Contents類的繼承1Java包的概念2訪問權(quán)限修飾符3方法的覆蓋4引用類型的轉(zhuǎn)換5類的繼承類的繼承在Java中定義一個類時,讓該類通過關(guān)鍵字extends繼承一個已有的類,這就是類的繼承(泛化)。被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。子類繼承父類的所有屬性和方法,同時也可以增加自己的屬性和方法。使用繼承繼承的語法和規(guī)則繼承的語法

示例Employee.java

Worker.java

[修飾符]class子類名extends父類名繼承的語法和規(guī)則繼承的語法

?

練習(xí)Officer.javaTestOfficer.java用java中類的繼承機(jī)制,實(shí)現(xiàn)Officer類,并設(shè)計(jì)一個測試程序TestOfficer類,來訪問Officer類繼承的好處使編碼更高效易維護(hù)代碼的重用繼承的語法和規(guī)則繼承的規(guī)則Java中只支持單繼承,也就是說每個類只能有一個父類,不允許有多重繼承一個父類可以有多個子類子類繼承父類所有的屬性和方法

示例

TestWorker.java子類實(shí)例化的過程子類實(shí)例化時先實(shí)例化其父類,然后實(shí)例化子類。要先調(diào)用父類的構(gòu)造器,父類構(gòu)造器運(yùn)行完畢,才調(diào)用子類的構(gòu)造器。如果實(shí)例化類D,說出構(gòu)造器執(zhí)行的順序。ABCDEsuper和this關(guān)鍵字super()作用:調(diào)用父類的構(gòu)造器只能出現(xiàn)在子類的構(gòu)造器中,且必須是第一行super()中的參數(shù),決定了調(diào)用父類哪個構(gòu)造器如果子類構(gòu)造器中沒有出現(xiàn)super,那么編譯器會默認(rèn)加上super(),即調(diào)用父類的空構(gòu)造器,如果父類沒有空構(gòu)造器,編譯器提示錯誤。this()作用:調(diào)用本類的構(gòu)造器只能寫在構(gòu)造器的第一行在同一個構(gòu)造器中super()和this()不能同時出現(xiàn)子類實(shí)例化的過程子類的構(gòu)造器—

子類不能繼承父類的構(gòu)造器使用默認(rèn)的構(gòu)造器在子類中的創(chuàng)建構(gòu)造器示例Worker.java在子類中創(chuàng)建構(gòu)造器時,必須調(diào)用父類的構(gòu)造器子類可以在自己的構(gòu)造器中使用super關(guān)鍵字來調(diào)用父類的構(gòu)造器如果使用super關(guān)鍵字調(diào)用父類構(gòu)造器,必須寫在該子類構(gòu)造器的第一行如調(diào)用的是父類中無參的構(gòu)造器,則可以不寫super()如果子類中調(diào)用了父類無參的構(gòu)造器,而父類中沒有無參構(gòu)造器則系統(tǒng)編譯出錯super(參數(shù)1,參數(shù)2,…);super和this關(guān)鍵字super.指向父類的引用。this.指向本類的引用。類的繼承給定以下代碼:下列描述哪些是正確的_____?A.編譯失敗B.代碼正常運(yùn)行

C.在第7行拋出異常D.在第2行拋出異常答案:AContents類的繼承1Java包的概念2訪問權(quán)限修飾符3方法的覆蓋4引用類型的轉(zhuǎn)換5Java中的包包的概念及應(yīng)用在Java中,包主要有以下用途:包允許將類組合成較小的單元有助于避免命名沖突包允許在更廣的范圍內(nèi)保護(hù)類、數(shù)據(jù)和方法包可以是類、接口和子包的集合Java中的包包的概念及應(yīng)用將類放入包中

注意:在java中位于包中的類,在文件系統(tǒng)中的存放位置,必須有與包名層次相對應(yīng)的目錄結(jié)構(gòu)package語句作為java源文件的第一條語句每個源文件只能聲明一個包如果沒有package語句,則默認(rèn)為無名包

package

包名;Java中常用的包java.langJava語言包,任何程序中,該包都被自動導(dǎo)入。java.awt圖形用戶界面包。java.awt.event圖形用戶界面事件處理包。java.swing跨平臺輕量級組件包。Java中常用的包java.sql數(shù)據(jù)庫訪問包。java.io這個包由對您的輸入/輸出操作有用的類組成。java.util該包提供了許多創(chuàng)建如:lists,calendar,date等所需要的類和接口。該包提供了許多進(jìn)行TCP/IP網(wǎng)絡(luò)編程的類和接口。import導(dǎo)入包中的類訪問其它包中的類包名.路徑名使用import關(guān)鍵字引入其它包中的類位于同一包中的類可以直接訪問packagetest;importp08.Animal;classCatextendsAnimal{…}packagetest;classCatextendsp08.Animal{…}import導(dǎo)入包中的類訪問其他包中的類導(dǎo)入包中所有的類導(dǎo)入子包中所有的類導(dǎo)入包中的某個類

import

包名.*;

import

包名.子包名.*;

import

包名.子包名.類名;Contents類的繼承1Java包的概念2訪問權(quán)限修飾符3方法的覆蓋4引用類型的轉(zhuǎn)換5封裝信息隱藏,隱藏對象的實(shí)現(xiàn)細(xì)節(jié),不讓用戶看到將東西包裝在一起,然后以新的完整形式呈現(xiàn)出來例如,兩種或多種化學(xué)藥品組成一個膠囊將方法和屬性一起包裝到一個單元中,單元以類的形式實(shí)現(xiàn)“隱藏屬性、方法或?qū)崿F(xiàn)細(xì)節(jié)的過程稱為封裝?!狈庋b封裝的目的隱藏類的實(shí)現(xiàn)細(xì)節(jié)讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地加入控制邏輯,限制對屬性的不合理操作便于修改,增強(qiáng)代碼的可維護(hù)性可進(jìn)行數(shù)據(jù)檢查示例Employor.javaTestEmployer.java訪問權(quán)限修飾符訪問權(quán)限修飾符訪問權(quán)限修飾符訪問權(quán)限修飾符用來控制類的成員和類的使用范圍類成員的訪問權(quán)限修飾符:private、default、protected、public類的訪問權(quán)限修飾符:public、default

示例:Access.javaTestAccess.javaprivatedefaultprotectedpublic同一類√√√√同一包中的類√√√不同包中的子類√√其他包中的類√訪問權(quán)限修飾符?練習(xí)給定以下代碼:

下列選項(xiàng)正確的是?

A.

編譯失敗B.

成功編譯并執(zhí)行

C.

編譯成功,但運(yùn)行時在ClassTest.java的第5行拋出異常

D.編譯成功,但運(yùn)行時在ClassTest.java的第6行拋出異常

答案:AContents類的繼承1Java包的概念2訪問權(quán)限修飾符3方法的覆蓋4引用類型的轉(zhuǎn)換5方法的覆蓋方法的覆蓋(override)重寫(rewrite)對從父類中繼承來的方法進(jìn)行改造在子類繼承父類時發(fā)生方法覆蓋的規(guī)則在子類中的覆蓋方法與父類中被覆蓋的方法應(yīng)具有相同的方法名相同的參數(shù)列表(參數(shù)數(shù)量、參數(shù)類型、參數(shù)順序都要相同)相同的返回值類型子類覆蓋方法的訪問權(quán)限要不小于父類中被覆蓋方法的訪問權(quán)限示例Worker.java方法的覆蓋?練習(xí)

給定下列代碼:當(dāng)在第6行加入什么方法時會引起編譯錯誤?答案:B方法的覆蓋?

練習(xí)

給定類,在其子類中下列哪些覆蓋方法可以正確的聲明_____classA{intmethod1(inta,doubleb){return0;}A.

intmethod1(inta,doubleb){return1;}B.

intmethod1(inta,longb){return1;}C.intmethod1(intb,doublea){return1;}D.

shortmethod1(inta,doubleb){return1:}E.

intmethod1(doubleb,inta){return1;}

答案:ACContents類的繼承1Java包的概念2訪問權(quán)限修飾符3方法的覆蓋4引用類型的轉(zhuǎn)換5上溯造型引用數(shù)據(jù)類型的轉(zhuǎn)換(對象造型)示例:TestStudent.java向上轉(zhuǎn)型(Upcasting)—子類轉(zhuǎn)換為父類,自動轉(zhuǎn)換;前提—具有繼承或?qū)崿F(xiàn)關(guān)系向上轉(zhuǎn)換損失了子類新擴(kuò)展的屬性和方法僅可以使用從父類中繼承的屬性和方法下溯造型引用數(shù)據(jù)類型的轉(zhuǎn)換示例:TestStudent.java向下轉(zhuǎn)型(Downcasting):強(qiáng)制轉(zhuǎn)換將父類對象顯示的轉(zhuǎn)換成子類類型。Animala=newCat();Catc=(Cat)a;instanceof運(yùn)算符instanceof運(yùn)算符判斷一個類是否實(shí)現(xiàn)了某個接口判斷一個實(shí)例對象是否屬于一個類它的返回值是boolean型的示例TestStudent.java

對象

instanceof

接口

對象

instanceof

類Contents多態(tài)6抽象類7接口8final關(guān)鍵字9內(nèi)部類10多態(tài)簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征同一個實(shí)現(xiàn)接口,使用不同的實(shí)例而執(zhí)行不同操作彩色打印機(jī)

打印機(jī)黑白打印機(jī)打印效果:彩色打印效果:黑白打印打印多態(tài)多態(tài)(動態(tài)綁定、Polymorphism)不同的對象對同一行為作出的不同響應(yīng)多態(tài)存在的三個必要條件要有繼承,或?qū)崿F(xiàn)要有重寫父類引用指向子類對象一旦滿足以上3個條件,當(dāng)調(diào)用父類中被重寫的方法后,運(yùn)行時創(chuàng)建的是哪個子類的對象,就調(diào)用該子類中重寫的那個方法在執(zhí)行期間(而非編譯期間)判斷所引用對象的實(shí)際類型,根據(jù)其實(shí)際類型調(diào)用相應(yīng)的方法多態(tài)多態(tài)的優(yōu)點(diǎn)簡化代碼改善代碼的組織性和可讀性易于擴(kuò)展?示例Parker.javaVehicle.javaBus.javaTruck.javaCar.java在停車場收費(fèi)系統(tǒng)中,收費(fèi)者會根據(jù)車型的不同收取不同的停車費(fèi),其中,客車:15元/小時貨車:12元/小時轎車:8元/小時編寫java程序完成此功能Contents多態(tài)6抽象類7接口8final關(guān)鍵字9內(nèi)部類10抽象類抽象類抽象類是抽象方法和非抽象方法的集合特殊情況全部是抽象方法全部為非抽象方法[訪問權(quán)限修飾符]abstractclass類名{……}abtractclassA{Stringname;abstractintmethod1(inta,intb);voidsayHi(){System.out.println(“Hello!”);}抽象方法抽象方法只有方法聲明,沒有方法實(shí)現(xiàn)的方法[訪問權(quán)限修飾符]abstract返回值類型抽象方法名(參數(shù)列表);abstractclassA{

abstractintmethod1(inta,intb);}抽象類的規(guī)則抽象類注意:抽象類不能被實(shí)例化;其包含的抽象方法必須在其子類中被實(shí)現(xiàn),否則該子類只能聲明為abstract;抽象方法不能為static;在下列情況下,一個類必須聲明為抽象類:

當(dāng)一個類的一個或多個方法是抽象方法時;當(dāng)類是一個抽象類的子類,并且沒有實(shí)現(xiàn)父類的所有抽象方法,即只實(shí)現(xiàn)部分;當(dāng)一個類實(shí)現(xiàn)一個接口,并且不能為全部抽象方法都提供實(shí)現(xiàn)時;抽象類?練習(xí)

給定以下代碼:

執(zhí)行下列哪些操作后,可以讓代碼通過編譯?對methodA方法添加方法體將5~7行,用“;”代替刪除class前的abstract關(guān)鍵字刪除methodA方法前的abstract關(guān)鍵字刪除methodB方法前的abstract關(guān)鍵字答案:BEContents多態(tài)6抽象類7接口8final關(guān)鍵字9內(nèi)部類10接口(interface)接口的聲明示例AudioDevice.javaVideoDevice.java接口中只包含常量和抽象方法,而沒有變量和方法的實(shí)現(xiàn)接口的成員:常量(字段)抽象方法[訪問權(quán)限修飾符]interface接口名{

接口的成員}接口(interface)接口的聲明注意:接口不是一個類,沒有構(gòu)造器,不能被實(shí)例化接口使用interface關(guān)鍵字來定義,而不是class接口默認(rèn):常量:publicstaticfinal抽象方法:publicabstractinterfaceRunnable{publicabstractvoidrun();}接口(interface)?練習(xí)給定以下代碼:下列選項(xiàng)中,哪些選項(xiàng)可以用來替代第2行代碼?finalintk=4;publicintk=4;staticintk=4;privateintk=4;abstractintk=4;答案:ABC接口(interface)?練習(xí)

下列選項(xiàng)中,哪些可以定義在一個接口中?答案:AB接口(interface)extendsinterfaceAextendsB{}interfaceinterfaceinterfaceextendsinterfaceAextendsB,C,D{}interfaceextends

擴(kuò)展接口(接口的繼承)示例VADevice.java接口和類的關(guān)系類實(shí)現(xiàn)接口—implements為了使用一個接口,你要編寫實(shí)現(xiàn)接口的類如果一個類要實(shí)現(xiàn)一個接口,那么這個類就必須實(shí)現(xiàn)接口中所有抽象方法。否則這個類只能聲明為抽象類多個無關(guān)的類可以實(shí)現(xiàn)一個接口,一個類可以實(shí)現(xiàn)多個無關(guān)的接口一個類可以在繼承一個父類的同時,實(shí)現(xiàn)一個或多個接口示例Television.java接口和類的關(guān)系

類的單繼承與多實(shí)現(xiàn)接口和類的關(guān)系類實(shí)現(xiàn)接口?示例Student.javaConsumer.javaPerson.java有一個Student類該類繼承了Person類,并實(shí)現(xiàn)了Consumer接口該類具有String類型的屬性school并有一個study方法,在該方法中,系統(tǒng)可打印出學(xué)生在那所學(xué)校學(xué)習(xí)并創(chuàng)建一個測試方法,測試Student類接口(interface)接口的意義:接口可以實(shí)現(xiàn)多繼承:用接口可以實(shí)現(xiàn)混合類型(主類型,副類型),java中可以通過接口分出主次類型主類型使用繼承,副類型,使用接口實(shí)現(xiàn)接口可以使方法的定義和實(shí)現(xiàn)相分離,降低模塊間或系統(tǒng)間的耦合性針對接口編程可以屏蔽不同實(shí)現(xiàn)間的差異,看到的只是實(shí)現(xiàn)好的功能。接口與抽象類的區(qū)別接口不能含有任何非抽象方法,而抽象類可以。類可以實(shí)現(xiàn)多個接口,但只能有一個父類。接口不是類分級結(jié)構(gòu)的一部分,沒有聯(lián)系的類可以實(shí)現(xiàn)相同的接口。Contents多態(tài)6抽象類7接口8final關(guān)鍵字9內(nèi)部類10final關(guān)鍵字final關(guān)鍵字final可以修飾的元素:類:不能被繼承變量(屬性和局部變量):不能被重新賦值在聲明時賦值,或在構(gòu)造器中賦值系統(tǒng)不會對final屬性默認(rèn)的賦初始值方法:不能在子類中被覆蓋,即不能修改。示例Final.javaTestFinal.java練習(xí)抽象類與final類的區(qū)別?final方法是否可以被子類繼承?Contents多態(tài)6抽象類7接口8final關(guān)鍵字9內(nèi)部類10內(nèi)部類內(nèi)部類(嵌套類)內(nèi)部類就是定義在另一個類內(nèi)部的類。內(nèi)部類對于同一包中的其它類來說,內(nèi)部類能夠隱藏起來。注意內(nèi)部類可以訪問其外部類中所有的屬性和方法無需創(chuàng)建外部類的對象,即可從內(nèi)部類訪問外部類的變量和方法。必須創(chuàng)建內(nèi)部類的對象,否則無法從外部類訪問內(nèi)部類的變量和方法。如果內(nèi)部類中有和外部類同名的變量或方法,則內(nèi)部類的變量和方法將獲得比外部類的變量和方法更高的優(yōu)先級。不能定義static變量內(nèi)部類類中定義的內(nèi)部類publicclassOuter{privateintvarOuter=100;classInner{intvarInner=200;publicvoidshowOuter(){System.out.println(varOuter);//是否能夠輸出?

}}publicvoidshowInner(){Inneri=newInner();System.out.println(i.varInner);}}內(nèi)部類類中定義的內(nèi)部類普通類的訪問權(quán)限修飾符defaultpublic內(nèi)部類的訪問權(quán)限修飾符defaultpublicprotectedprivate內(nèi)部類內(nèi)部類的訪問在Outer內(nèi)訪問Inner,只需如下:在Outer外訪問Inner,必須如下:

Innerin=newInner();Ou

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論