第4章面向?qū)ο笙卵a(bǔ)充案例_第1頁
第4章面向?qū)ο笙卵a(bǔ)充案例_第2頁
第4章面向?qū)ο笙卵a(bǔ)充案例_第3頁
第4章面向?qū)ο笙卵a(bǔ)充案例_第4頁
第4章面向?qū)ο笙卵a(bǔ)充案例_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四充案案例4- 類的繼2、練習(xí)目3、需求分4、設(shè)計思路(實現(xiàn)原理Student抽取兩個類共同的內(nèi)容(如:吃飯、睡覺)封裝到一個類中,各自特有的部分保留讓學(xué)生類繼承類,老師類也繼承編寫測試類Example01,測試Student類和Teacher是否繼承了類的成員二、案{Stringvoideat()System.out.println("}voidsleep(){}}classStudent 1int}classTeacherintvoidteach(){}}publicclasspublicpublicclasspublicstaticvoidmain(String[]args){Students=newStudent(); Teachert=newTeacher();}}4-1圖4- 運行結(jié)1、在Jaa父類。234、繼承的好處是劃分了類的層次性,實現(xiàn)了代碼重用、擴(kuò)展了程序功案例4- 方法的重2練習(xí)目3需求分修改,即對父類的方法進(jìn)行重寫。為了讓初學(xué)者掌握方法的重寫,本案例將編寫一個類Newhone,hone類并對honeca()4、設(shè)計思路(實現(xiàn)原理定義一個類Phone,編寫方法call(),表示 功定義一個Phone的子類NewPhone,重寫父類call()方法,讓它除了打 編寫一個測試類Example02,分別調(diào)用重寫前和重寫后的call()二、案classPhone{voidcall(){System.out.println(" }}classclassPhone{voidcall(){System.out.println(" }}classNewPhoneextendsPhone{voidcall(){System.out.println("開啟語音}}2、定義測試類Example02publicpublicclasspublicstaticvoidmain(String[]args)Phonephone=newPhone();PhonenewPhonenewNewPhone();}}4-2圖4- 運行結(jié)123、子類方法的修飾權(quán)限不能小于父類的4案例4- super父類成員變名稱:super2練習(xí)目掌握使用super關(guān)鍵字父類成員變3需求分父類的該成員變量super.成員變量來實現(xiàn)。為了super關(guān)鍵字的用法,本案例將分別設(shè)計Fu類及其子類Zi,并在Zi類的方法中使用super關(guān)鍵字Fu類的成員變量。4、設(shè)計思路(實現(xiàn)原理編寫一個Fu類,在類中定義無參構(gòu)造和一個初始值為20的numZiFunum值進(jìn)行了修改,同時在子類中定義無參構(gòu)造和一個無返回值method()方法,method()superFunum成員變量。定義測試類Example03二、案classFuFu()intnum=}classclassFuFu()intnum=}classZiextendsFu{Zi(){}intnum30;//修改num的voidmethod(){super關(guān)鍵字調(diào)用父類成員變System.out.println("Fu類中num值為:super.num);System.out.println("Zi類中num值為:"+num);}}2、定義測試類Example03classclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}4-3圖4- 運行結(jié)1、使用super2、被調(diào)用的父類成員變量,必須是非private案例4- super父類成員方名稱:super2練習(xí)目掌握使用super關(guān)鍵字父類成員方3需求分子重父的法子對將法父被寫方法為解這問在Jaa中專提了個super關(guān)字于類的為讓學(xué)熟悉super關(guān)字用本例將別計u及子類i在i的法使用super鍵字u的員法。4、設(shè)計思路(實現(xiàn)原理編寫一個Fu類,在類中定義無參構(gòu)造和一個無返回值的show()Zi類繼承Fu類,子類中定義無參構(gòu)造和一個無返回值的method()方法,method()方法中使用superFushow()方法。定義測試類Example04二、案classFuFu()voidshow(){System.out.println("Fushow");}}classZiextendsclassFuFu()voidshow(){System.out.println("Fushow");}}classZiextendsFu{Zi(){}voidmethod(){System.out.println("Zimethod");super關(guān)鍵字調(diào)用父類成員方}}2、定義測試類Example04classclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}}4-4圖4- 運行結(jié)2、被調(diào)用的父類成員方法,必須是非private案例4- super父類構(gòu)造方名稱:super2練習(xí)目掌握如何在子類構(gòu)造方法中使用super關(guān)鍵字父類構(gòu)造方3需求分可以使用supersupru類及其類i在i的造法使用super鍵字u的造法。4、設(shè)計思路(實現(xiàn)原理編寫一個FuZiFusuperFu類的構(gòu)定義測試類Example05二、案classFuFu()System.out.println("Fu類構(gòu)造方法}}classFuFu()System.out.println("Fu類構(gòu)造方法}}classclassZiextendsFu{Zi(){super();//System.out.println("Zi類構(gòu)造方法}}publicclasspublicpublicclasspublicstaticvoidmain(String[]args){Zizi=newZi();}}4-5圖4- 運行結(jié)1、通過super2super3、被調(diào)用的父類構(gòu)造方法,必須是非private案例4- final修飾名稱:final2練習(xí)目了解final掌握final3需求分Jaa中的類被fnal熟悉fnalfnaluuifnal4、設(shè)計思路(實現(xiàn)原理final關(guān)鍵字修飾的FuZi類,ZiFu定義測試類Example06二、案finalclassFu}finalclassFu}classZiextendsFu}2、定義測試類Example06publicpublicclasspublicstaticvoidmain(String[]args){Zizi=newZi();}}4-6圖4- 運行結(jié)在Java中,被final案例4- final修飾方名稱:final2練習(xí)目掌握使用final3需求分fnalfnalufnal修飾的show()ui類,在i類中對show()4、設(shè)計思路(實現(xiàn)原理Fufinalshow()Zi類,ZiFuZishow()方法進(jìn)行重寫3)Example07ZiZishow()方法。二、案classFupublicfinalvoidshow(){ classFupublicfinalvoidshow(){ }}classZiextendsFupublicvoidshow() ,給處理了}}2、定義測試類Example07publicpublicclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}4-7圖4- 運行結(jié)當(dāng)一個類的方法被final案例4- final修飾局部變名稱:final2練習(xí)目掌握使用final3需求分Java中被final修飾的變量為常量,它只能被賦值一次,也就是說final修飾的變量一旦被賦值,其值不能改變。為了讓初學(xué)者掌握使用final關(guān)鍵字修飾局部變量,本案例將在類的方法中定義一個final修飾的局部變量,并試著對該變量重新賦值。4、設(shè)計思路(實現(xiàn)原理編寫一個Example08類,類中定義類一個final修飾的局部變量age,為其賦初始值為18age20二、案publicclasspublicpublicclasspublicstaticvoidmain(String[]args){finalintage=18;//第一次可以賦值age=20; //再次賦值會報錯}}4-8圖4- 錯誤提final案例4- final修飾成員變名稱:final2練習(xí)目掌握使用final3需求分Java中,final修飾的變量表示常量,一經(jīng)定義就不能重新賦值。為了讓初學(xué)final修飾final關(guān)鍵字修飾成員變量,觀察其是否能夠再次賦值。4、設(shè)計思路(實現(xiàn)原理編寫一個Fu類,父類中定義一個變量X,并用finalZi類,ZiFu定義測試類Example09二、案classFupublicfinalintXclassFupublicfinalintX=}classZiextendsFuX20;//在子類中對常量再賦新值publicvoidmethod(){}}2、定義測試類Example09publicpublicclasspublicstaticvoidmain(String[]args){Ziz=newZi();}}編譯錯誤,結(jié)果如圖4-9圖4- 錯誤提iXJaa中被fnalfnal程會編譯錯。案例4- 接口的實2練習(xí)目3需求分mpemensmpemensIner4、設(shè)計思路(實現(xiàn)原理1)設(shè)計名為Inter的接口,接口中定義一個初始值為20的num常量和method()抽象方法。2)InterInterImplimplements關(guān)鍵字實現(xiàn)接口中的方法。3)編寫測試類Example10二、案interfaceInterintnum=20;voidmethod();}interfaceInterintnum=20;voidmethod();}classInterImplimplementsIntervoidshow()}publicvoidmethod(){System.out.println("InterImplmethod");}}classpublicstaticclasspublicstaticvoidmain(String[]args)InterImplii=newInterImpl();}}4-10圖4- 運行結(jié)1、接口使用interface2、接口沒有構(gòu)造方法,接口中的變量缺省都是使用publicstaticfinal修飾的,即全局常量,接口中的方法都是public 3、定義一個類,并使用implements4、由于接口中的方法都是抽象方法,因此不能直接通過實例化對象的方式來調(diào)用接口中的方法,需案例4- 接口的繼2練習(xí)目3需求分eends,案將示口接、與口繼承系。4、設(shè)計思路(實現(xiàn)原理設(shè)計接口Phone代表傳統(tǒng),在接口中定義receiveMessages()和call()抽象方法設(shè)計接口SmartPhone代表智能,在接口中定義faceTime()方法,并使用extends關(guān)鍵字繼PhonePhone接口的所有功能。設(shè)計類M表示小米類中定義useMIUI()方法并實現(xiàn)SmartPhone接口的所有方法編寫測試類Example11,測試類中對M進(jìn)行實例化,并小米具有的各種功能二、案11PhoneSmartPhoneinterfacePhonevoidreceiveMessages();voidcall();}interfaceSmartPhoneextendsPhone{voidfaceTime();}classM implementsSmartPhone{publicvoidreceiveMessages(){}publicvoidcall(){}publicvoidfaceTime(){ }publicvoiduseMIUI(){}}2、定義測試類Example11publicpublicclassExample11publicstaticvoidmain(String[]args)Mm=new}}4-11圖4- 運行結(jié)接口與接口之間的繼承關(guān)系,可以是單繼承,也可以是多繼承;一個接口可以通過eends關(guān)鍵字繼案例4- ObjectObject2練習(xí)目Object掌握Object3需求分在JDKObectObect類自身的equas()==的地址值,這時候常常就需要根據(jù)自身需求來重寫equas()方法。為了方便初學(xué)者學(xué)習(xí)Obect類,本equas()方法。4、設(shè)計思路(實現(xiàn)原理設(shè)計Student類,定義sid變量表示學(xué)號,重寫equals()方法,判斷進(jìn)行比較的兩個學(xué)生對象學(xué)編寫測試類Example12,創(chuàng)建兩個Student的對象Lily和Lucy,并分別調(diào)用setter方法為學(xué)號賦值,最后通過打印語句,輸出這兩個對象通過“==equals()方法比較后的結(jié)果。二、案classStudent{Student(){}privateintclassStudent{Student(){}privateintpublicvoidsetSid(intsid){this.sid=sid;}}publicintgetSid(){returnsid;}我們的需求是學(xué)號相同的人就是同一個人.publicbooleanequals(Objectobj){if(this==obj){returntrue;}if(!(objinstanceofStudent)){returnfalse;}Students=(Student)obj;return(this.sid==s.sid);}}2、定義測試類Example12,為學(xué)號賦值,并打印使用“==”和重寫equals()方法的比較結(jié)果publicclasspublicclassExample12publicstaticvoidmain(String[]args){StudentLily=newStudent();StudentLucy=newStudent();System.out.println("Lily==Lucy"+"\t\t"+(Lily==Lucy));}}4-12圖4- 運行結(jié)1、Object類是Javapublicbooleanequals(Objectobj)2、Object類中的publicbooleanequals(Objectobj)returnreturn(this==}實際開發(fā)中很少比較內(nèi)存地址值,所以我們常常會根據(jù)自身需求重寫equals()案例4- 多態(tài)的作2練習(xí)目3需求分在Jaa中了現(xiàn)態(tài)允使一父類的量來一子類型對象根被子對特的得不的行果多提代了擴(kuò)性可性為幫初者4、設(shè)計思路(實現(xiàn)原理編寫Animal接口,接口中定義sleep()Cat類實現(xiàn)Animal接口的方法,并定義另一個方法 編寫測試類Example13,使Cat對象指向父類Animal ,并通過該調(diào)用sleep()方法二、案2、定義測試類Example13,Cat2、定義測試類Example13,Cat對象指向,并使用父類調(diào)用sleep()方法interfaceAnimal{voidsleep();}classCatimplementsAnimal{voidcat ouse(){}publicvoidsleep(){}}publicpublicclassExample13publicstaticvoidmain(String[]args)AnimalAnimalanimal=newCat();}}4-13圖4- 運行結(jié)1Jaa中,允許使用一個父類類型的變量來2要有父類指向子類對象3、多態(tài)的好處是提高代碼的擴(kuò)展性和可性4、多態(tài)的弊端是父類或者接口只能調(diào)用自己具備的成員,不能子類特有的成員案例4- 對象的類型轉(zhuǎn)2練習(xí)目3需求分編寫一個接口Animal,接口中定義sleep()方法,編寫兩個類Cat和Pig分別實現(xiàn)接口,再編寫一Example14實現(xiàn)對象的類型轉(zhuǎn)換。4、設(shè)計思路(實現(xiàn)原理1)Animalsleep()方法。2)CatPigAnimal接口的方法3編寫測試類Example14對對象的類型進(jìn)行轉(zhuǎn)換使Cat向上為Animal類型然后再讓Pig二、案interfaceAnimal{voidsleep();}classCatinterfaceAnimal{voidsleep();}classCatimplementsAnimal{publicvoidsleep(){}}classPigimplementsAnimal{publicvoidsleep(){}}2、定義測試類Example14,Cat對象指向Animal,并使用父類Animal調(diào)用sleep()方法。代publicclassExample14publicclassExample14publicstaticvoidmain(String[]args){Animalanimal=newCat();Pigpig=(Pig)animal;}}圖4- 錯誤提1、向下類型轉(zhuǎn)換時,需要注意被轉(zhuǎn)換對象的真實類型是否和需要轉(zhuǎn)換的對象類型相同,否則容易報(aa.an.CassasExcepon)。 變量)instanceof類(或接口2、Java提供了一個關(guān)鍵instanceof,它可以判斷一個對象是 變量)instanceof類(或接口3、進(jìn)行向上類型轉(zhuǎn)換,子類對象當(dāng)做父類類型使用時,不能通過父類變量去調(diào)用子類中某些方法,案例4- 內(nèi)部名稱:內(nèi)部2練習(xí)目了解什么是內(nèi)部掌握如何使用內(nèi)部3需求分此還以用部來現(xiàn)口為讓學(xué)能好理什是部類本例演如實一個部。4、設(shè)計思路(實現(xiàn)原理設(shè)計一個Inter接口,接口中定義show()和method()設(shè)計一個Outer類,在類的function()方法中使用內(nèi)部類實現(xiàn)Inter接口并實例化,并調(diào)show()和method()最后編寫一個測試類Example15,創(chuàng)建Outer的對象并調(diào)用function()二、案interfaceInter{voidshow();voidmethod();}classOutervoidfunction()interfaceInter{voidshow();voidmethod();}classOutervoidfunction()Interi=newInter(){publicvoidshow(){}publicvoidmethod(){}}}2、定義測試類Example15publicpublicclassExample15publicstaticvoidmain(String[]args){Outero=newOuter();}}4-15圖4- 運行結(jié)new父類(參數(shù)列表new父類(參數(shù)列表 }2 內(nèi)部類是實現(xiàn)接口的一種簡便寫法,在程序中不一定非要使 內(nèi)部類3、什么時候使用內(nèi)部類:通常在使用方法是接口類型參數(shù),并該接口中的方法不超過三個時,以將內(nèi)類為數(shù)遞。4將一個類B定義在另一個類A的里面,那么B類就稱為內(nèi)部類(嵌套類)上內(nèi)部類可以直接外部類中的成員,包括私有成員,而外部類要內(nèi)部類中的成員必須要案例4- try...catch語try...catchfinally2練習(xí)目標(biāo)掌握如何使用try...catch3需求分Jaa中提供了一種對異常進(jìn)行處理的方式——異常捕獲,異常捕獲通常使用rycach語句。為rycachrach4、設(shè)計思路(實現(xiàn)原理Example16arrint類型一維數(shù)組,遍歷數(shù)組輸出每次遍歷出的值,結(jié)束輸出“over2)使用try...catch二、案publicpublicclassExample16publicstaticvoidmain(String[]args){int[]arr={1,2,3,4,5};tryfor(intx=0;x<=arr.length;x++){}}catch(ArrayIndexOutOfBound ceptione}}}4-16圖4- 運行結(jié)1、try代碼塊中編寫可能發(fā)生異常的Java語句,catch代碼塊中編寫針對異常進(jìn)行處理的代碼。在2try...catchtrycatch。3、Throwable:是異常體系的超類.|--Error重大的錯誤,這個問題發(fā)生后,一般我們處理不了,一般不處理,程序進(jìn)行修正。(內(nèi)存溢出)|--Exception可以處理的問題,這個問題需要我們編寫針對性的代碼進(jìn)行處理。(異常處理案例4- finally語try...catchfinally2練習(xí)目標(biāo)finally3需求分在程序中,有時候我們希望有些語句無論程序是否發(fā)生異常都要執(zhí)行,這時就可以在rycachfnayfnayfnay語句4、設(shè)計思路(實現(xiàn)原理Example17main方法中使用try…catch…finally…try10/0,catch語句塊中會輸出“出異常類”在finally二、案publicpublicclassExample17publicstaticvoidmain(String[]args){try{System.out.println(10/}catch(ArithmeticExceptione){}finally}}}4-17圖4- 錯誤提無論是否發(fā)生異常,finally代碼塊是一定會執(zhí)行的。但是需要注意的是,finally中的代碼塊在一種情finallySystem.exit(0)語句。案例4- throws關(guān)鍵throws2練習(xí)目throws3需求分Jaa中許方的面使用hrows關(guān)字外方法可發(fā)的常這調(diào)者調(diào)hrowshrows4、設(shè)計思路(實現(xiàn)原理在該類中定義方法div()用于進(jìn)行除法運算,運算前對被除數(shù)進(jìn)行判斷,如果等于0,使用由于throw拋出了非運行時異常,為了保證編譯通過,我們需要在方法名后面使用throws拋2)在main方法中調(diào)用div()方法,并通過try…catch…二、案publicpublicclassExample18publicstaticvoidmain(String[argstry{div(1,}catch(Exceptione){}catch(Exceptione){}}publicstaticintdiv(intx,inty)throwsExceptionif(y==0)throwsthrownew}returnx/}}4-18圖4- 運行結(jié)修飾符返回值類型方法名([參數(shù)1,參數(shù)修飾符返回值類型方法名([參數(shù)1,參數(shù)2.....])throws }2、throws關(guān)鍵字需要寫在方法的后面,throws后面需要方法中發(fā)生異常的類型,通常將這種做法稱為方法拋出一個異常。案例4- 自定義異2練習(xí)目3需求分JaaExcepon4、設(shè)計思路(實現(xiàn)原理自定義名為MyException的異常類,繼承自Exception在Example19在main()二、案classMyExceptionclassMyExceptionextendsException{privateintnumber;MyException(Stringmessage){}MyException(Stringmessage,intnumber){this.number=}publicintgetNumber(){returnnumber;}}2publicpublicclassExample19publicstaticvoidmain(String[]args){try{divide(20,}catch(MyExceptionmy)System.out.println("你給的除數(shù)是my.getNumber(而我們要求是+}}publicstaticintdivide(inta,intb)throwsMyException{if(b=0){thrownewMyException("除數(shù)不能為零}elsereturna/}}}4-19圖4- 運行結(jié)1、在Java中允許用戶自定義異常,但自定義的異常類必須繼承自Exception2、throw關(guān)鍵字用于在方法中拋出異常的實例對象,其語法格式如下 throwException異常對 3、ain()方法中,定義了一個ry…cach語句用于捕獲dide()方法拋出的異常。在調(diào)用dide()方法時由于傳入的被除數(shù)不能為

溫馨提示

  • 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

提交評論