JAVA-抽象類、接口與包_第1頁
JAVA-抽象類、接口與包_第2頁
JAVA-抽象類、接口與包_第3頁
JAVA-抽象類、接口與包_第4頁
JAVA-抽象類、接口與包_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章抽象類、接口與包1學習目標理解抽象類和接口。掌握創(chuàng)立和導入包的方法。2抽象電器(play)電視機(playvideo)影碟機(playsound)抽象的作用是從一類相似實體中抽取共性的東西,比方任何電器都有一個播放功能,只是具體播放的內(nèi)容不同而已。35.1抽象類抽象類表達數(shù)據(jù)抽象的思想,是實現(xiàn)多態(tài)的一種手段,其目的是提供可由所有子類共享的一種形式,子類可根據(jù)自身需要擴展抽象類。用abstract修飾的類被稱為抽象類。4概念抽象類:沒有具體實例對象的類。抽象類通常包括一個或多個抽象方法〔只有方法說明,沒有方法體〕,抽象類的子類必須完成父類定義的每一個抽象方法,除非該子類也是抽象類。它的主要用途是用來描述概念性的內(nèi)容和方案,沒有具體的實現(xiàn),這樣可以提高開發(fā)效率,更好地統(tǒng)一用戶“接口”。5定義[<修飾符>]abstractclass類名{成員變量定義;abstract返回類型方法名〔[參數(shù)列表]〕;返回類型方法名〔[參數(shù)列表]〕{}//非抽象方法}6

abstract抽象類不能被實例化構(gòu)造方法

和static

方法不能是抽象的父類的抽象方法往往在子類中實現(xiàn)

特點7說明可包含抽象方法和非抽象方法。但包含抽象方法的類必須為抽象類子類〔抽象類除外〕繼承抽象類時,必須實現(xiàn)所有的抽象方法。abstract不能修飾變量和構(gòu)造函數(shù)、不能與static、private、final并列修飾同一個方法。抽象類不能被實例化。抽象類可以具有指向子類對象的對象引用8例如抽象方法不具有任何實現(xiàn)代碼abstractclassShape{protecteddoublelen;//邊長長度abstractdoublearea();}classSquareextendsShape{ Square(doublenum1){super(num1);}

doublearea(){("正方形面積為:");returnlen*len;}}

9抽象類的使用由于抽象類只是預先確定了總體結(jié)構(gòu),缺少實際內(nèi)容或?qū)崿F(xiàn)過程,又不能被實例化,因此要發(fā)揮它的作用,必須被子類繼承后,才具有實際意義。繼承抽象類的子類〔除抽象類外〕,必須將所有抽象方法重寫和實現(xiàn)。10抽象類的作用子類繼承該抽象類。當一個非抽象類繼承該抽象類,必須實現(xiàn)該抽象類中的全部抽象方法?!卜浅橄箢惒粦?yīng)該包含抽象方法〕1112注意抽象方法必須在抽象類中進行定義不能用關(guān)鍵字abstract來修飾構(gòu)造方法關(guān)鍵字static和private不能與abstract組合使用關(guān)鍵字final不能與abstract組合使用13Continue抽象類可以繼承抽象類,這樣就不用再實現(xiàn)父類的方法。abstractclassA{ abstractvoidmethod1();}abstractclassBextendsA{ abstractvoidmethod2();}145.2接口接口:可以幫助實現(xiàn)類間多重繼承結(jié)構(gòu)。接口是抽象方法和靜態(tài)常量的集合,因此所有的方法都需要在子類中實現(xiàn)。用途:

通過接口實現(xiàn)不相關(guān)類的相同行為,而無需考慮這些類之間的關(guān)系。

通過接口了解對象的交互界面,而無需了解對象所對應(yīng)的類。

可以利用接口實現(xiàn)多態(tài),同時接口也彌補了Java單一繼承的弱點15舉例單繼承水果梨北京鴨梨水果類梨香蕉蘋果樹樹木類松樹柳樹多繼承16定義[訪問權(quán)限]interface接口名[extends父接口1,父接口2,…]{//常量聲明[public][static][final]類型常量名=常量值;//抽象方法聲明[public][abstract]類型方法名(參數(shù));}17說明接口中的成員變量默認為publicstaticfinal型的,而且值固定。接口中的所有方法默認為publicabstract方法。類〔抽象類除外〕實現(xiàn)接口,必須實現(xiàn)所有抽象方法。無構(gòu)造函數(shù),不能被實例化,可以實現(xiàn)多重繼承。18例如:創(chuàng)立接口//定義方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定義程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}19接口的使用用關(guān)鍵字implements實現(xiàn)接口,例如:classdemoimplementsmyinterface如果有一個以上接口被實現(xiàn),那么用逗號隔開接口名稱,如下所示:classdemoimplementsMycalc,Mycount實現(xiàn)接口的類〔除抽象類外〕必須實現(xiàn)其所有的抽象方法。類在實現(xiàn)時,必須顯式地使用public修飾符。20interfaceMyInterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}接口使用例如publicclassInterfaceDemoimplementsMyInterface{ publicvoidadd(intx,inty) {("和:"+(x+y)); } publicvoidvolume(intx,inty,intz) {("積:"+(x*y*z));}publicstaticvoidmain(String[]args) { MyInterfaced=newInterfaceDemo(); d.add(10,10); d.volume(10,10,10); }}21實現(xiàn)關(guān)鍵字:implements接口有幾個方法一定要實現(xiàn)并且一定要加publicpublicclassTestimplementsB{ publicvoidadd(){} publicfloatsum(floatx,floaty){returnx-y;} publicdoublesub(doublex,doubley){returnx-y;}}22例如interfaceA{ inta=4;//必須是賦值,常量 publicabstractvoidmethod1();}classBimplementsA{Publicvoidmethod1(){ System.out.println(2);}}23Continue由于接口中都是抽象方法,所以接口中默認的方法都是abstract并且public,用戶在定義抽象方法時,可以省略abstract,public由于接口中的成員量都是常量,所以必須給賦值,final可以省略。24實現(xiàn)多個接口interfacePrintable{}interfaceAddable{}classAimplementsPrintable,Addable25接口與接口之間也可以繼承不用去實現(xiàn)方法InterfaceA{}InterfaceBextendsA{}26與類的區(qū)別一個類只能繼承一個父類,而一個接口那么可以有多個父接口。類繼承了父類的方法,可以選擇是否覆蓋父類的方法;而接口中的方法沒有具體實現(xiàn),因此,實現(xiàn)接口的類必須實現(xiàn)所有的抽象方法。接口允許沒有父接口,即接口不存在最高層,而類的最高層是object類。27與抽象類的區(qū)別接口中的所有方法都是抽象方法,而抽象類中可以含有非抽象方法。抽象類可以實現(xiàn)接口,但接口不可以繼承類。在設(shè)計級別上,假設(shè)子類有共同的邏輯,那么考慮用抽象類,如幾個類之間含有相同的某項功能,那么考慮用接口。28引用類型轉(zhuǎn)換引用類型之間轉(zhuǎn)換的前提:父子關(guān)系例如:Employee是父類,Manager是子類Employeeemp=newManager();語法成立因為Manager也是一個Employee但是Managerm=newEmployee()是錯誤的,Employee肯定是Manager????29classA{//Employee inta=2; publicvoidmethod1(){ System.out.println(1); } publicvoidmethod2(){ System.out.println(2); }}classBextendsA{//Manager inta=3; publicvoidmethod1(){ System.out.println(3); } publicvoidmethod3(){ System.out.println(4); } publicstaticvoidmain(Stringargs[]){ Aa1; a1=newB(); a1.method1(); a1.method2();System.out.println(a1.a);//這個值為多少呢??? //a1.method3(); }}30多態(tài)重載方法重寫上轉(zhuǎn)型對象接口回調(diào)31上轉(zhuǎn)型對象用于繼承父類聲明的變量,把子類的對象賦予給該變量,我們稱作為上轉(zhuǎn)型對象。該對象操作的方法,是重寫的方法。屬性仍舊是父類的屬性。該對象失去了子類自己增加的屬性和方法。3233接口回調(diào)使用某一個接口的類創(chuàng)立的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類實現(xiàn)的接口中的方法。當接口變量調(diào)用被類實現(xiàn)的接口中的方法時,就是通知相應(yīng)的對象調(diào)用接口的方法,這一過程稱為對象功能的接口回調(diào)。接口回調(diào)可以實現(xiàn)多態(tài)!34例子355.3包包允許將類組合成較小的單元〔類似文件〕,使其易于找到和使用相應(yīng)的類文件。包允許在更廣的范圍內(nèi)保護類、數(shù)據(jù)和方法,可以在包內(nèi)定義類,而在包外的代碼不能訪問該類?!鞍鼘㈩惷臻g劃分為更加容易管理的塊,包既是命名機制也是可見度控制機制

”36包包是一組相關(guān)的類和接口的集合。將類和接口分裝在不同的包中,可以防止重名類的沖突,有效地平安管理命名空間。默認情況下,java.lang包下的類,系統(tǒng)會自動導入。37包無名包:在缺省情況下,系統(tǒng)〔針對每一java文件〕自動創(chuàng)立。文件中的所有類都隸屬這個包類之間可以相互引用非private的屬性和方法不能被其他包的類所引用有名包格式:pakage包名;說明:必須置于import語句前,而且是第一行。一個java文件只能有一個包38創(chuàng)立包//filename:ABC.javapackagetest;publicclassABC{ intbase=10; publicvoidshow() { System.out.println(base); }}

聲明包39使用包名.類名前綴 如:MyPackage.Circle加載需要使用的類 在程序的開始局部利用import語句加載所需的類。如:importMyPackage.Circle;加載其他類〔包括系統(tǒng)類〕 利用import語句可以加載整個包中的類。 如:importMyPackage.*;包的引用40導入包//filename:PackageTest.javaimporttest.ABC;publicclassPackageTest{ publicstaticvoidmain(String[]args) {

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論