版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Java教程各種接口的介紹Interfaces 接口在軟件工程中,由一份“契約”規(guī)定來自不同的開發(fā)小組的軟件之間如何相互作用是非常常見的。每個小組都可以在不知道別的組的代碼的前提下獨立開發(fā)自己的代碼。Java中的interface就是這樣的一份“契約”。舉個例子,假設在未來社會有一種智能汽車,它可以在自動運載旅客而不需要人工操作。汽車生產(chǎn)商開發(fā)了軟件(當然是用Java)來控制這種汽車停止,發(fā)動,加速,左轉等等。電子導航儀器生產(chǎn)商負責開發(fā)接受GPS位置數(shù)據(jù)和交通狀況無線傳輸?shù)碾娔X系統(tǒng),并且應用這些信息來駕駛汽車。汽車生產(chǎn)商必須公布工業(yè)標準interface,該interface需詳細解釋哪些me
2、thods可以用于控制汽車運動(該標準適用于任何汽車,任何生產(chǎn)商)。導航系統(tǒng)生產(chǎn)商就可以應用這個interface所介紹的各種methods來控制汽車。任何一個工業(yè)廠商都不需了解其他廠商是如何實現(xiàn)他們的軟件的。事實上,只要大家都嚴格遵守所公布的interface,每個廠商對其自己的軟件都有高度所有權,并且保有隨時修改的權利。在java中的interface在java編程語言里,一個interface是引用類型(reference),它與class相似,因此只能包含常量(constants),方法簽名(method signatures)和嵌套類型(nested types)。Interface
3、不得含有方法的具體代碼(method body)。 Interface 不可被實例化(instantiated),只能被其它class實現(xiàn)(implemented)或者被其它interface繼承。定義一個interface與創(chuàng)建一個新類類似:復制代碼 代碼如下:public interface OperateCar / constant declarations, if any / method signatures / An enum with values RIGHT, LEFT int turn(Direction direction, double radius, double st
4、artSpeed, double endSpeed); int changeLanes(Direction direction, double startSpeed, double endSpeed); int signalTurn(Direction direction, boolean signalOn); int getRadarFront(double distanceToCar, double speedOfCar); int getRadarRear(double distanceToCar, double speedOfCar); / more method signatures
5、 如想使用上面這個interface,你需要寫一個class來實現(xiàn)它。當一個可被實例化的class實現(xiàn)某個接口時,它需要提供所有該interface所聲明的所有方法(methods)的具體代碼。在上面的自動化汽車的例子中,汽車生產(chǎn)商即是接口實現(xiàn)者。由雪佛蘭公司的實現(xiàn)方法當然不同于本田公司的方法,但是它們都遵循同一個接口。 導航系統(tǒng)生產(chǎn)商是這個接口的使用者,他們的系統(tǒng)將根據(jù)汽車方位的GPS數(shù)據(jù),數(shù)字化地圖和交通情況來駕駛汽車。因此,這個導航系統(tǒng)將會涉及以下的方法(methods): 轉彎,切道,剎車,加速等等。API 接口自動化汽車的例子展示了interface在工業(yè)標準應用程序接口(API,
6、Application Programming Interface)中的應用. 在商業(yè)軟件中,API也很常見。 通常來說, 一個公司發(fā)售的軟件包中會含有其他公司希望應用在自己的產(chǎn)品中的復雜方法(methods)。比如一個包含了數(shù)字圖形處理方法的軟件包就可以出售給開發(fā)終端客戶圖像軟件的公司。購買后,該公司就可以應用interface所定義的方法。當圖像處理公司向所有客戶公開它的API的同時,這些API的實現(xiàn)方法是高度保密的。事實上,只要保留住原始的interface不被改變,這些API的實現(xiàn)方法很可能在將來被重寫。Interfaces 和多重繼承在java編程語言里,interface還有另外一
7、個重要作用。 盡管Interface是與類一起使用的,但它并不是類的層次結構的一部分。java編程語言不支持多重繼承,但是interface提供了替代方案。在java中,一個類只能繼承于單一的類,但是它可以實現(xiàn)多個接口。因此,對象可以有多重類型:屬于它自身類的類型,和屬于它所繼承的所有接口的類型。這意味著,如果聲明一個變量是某個接口類型,這個變量可以指代任何實現(xiàn)該接口的類的實例。這部分會在“使用接口類型”中詳細討論。定義一個interface一個接口的定義是由 修飾詞(modifiers),關鍵詞 interface, 接口名稱,由逗號分隔開的父接口(parent interfaces),和接
8、口實體(interface body)。例子如下:復制代碼 代碼如下:public interface GroupedInterface extends Interface1, Interface2, Interface3 / constant declarations / base of natural logarithms double E = 2.718282; / method signatures void doSomething (int i, double x); int doSomethingElse(String s); Public規(guī)定了這個接口可以被任何包中的任何類所使用
9、。如果你聲明這個接口是public的,它只能被同一個包里的類所使用。一個接口可以繼承其它接口,就像一個類能后繼承其它類一樣。但是類只能繼承一個父類,而接口卻可以繼承任何數(shù)目的接口。接口實體(interface body)接口實體中含有它所包含的所有方法的聲明。每個聲明都以引號為結束,因為接口不用實現(xiàn)它所聲明的方法。接口中所有的方法都默認是public的,因此修飾詞public可以被省略。接口還可以聲明常量。同樣的,常量的修飾詞public, static和final可以被省略。接口的實現(xiàn)為了聲明某個類實現(xiàn)了某個接口,你需要在類的聲明中使用implements。你的類可以實現(xiàn)多個接口,所以imp
10、lements關鍵詞后面可以跟隨多個由逗號分隔的接口名稱。為了方便,implements關鍵詞多跟在extends關鍵詞的后面。一個接口實例RelatableRelatable是一個用來比較兩個對象大小的接口。復制代碼 代碼如下:public interface Relatable / this (object calling isLargerThan) / and other must be instances of / the same class returns 1, 0, -1 / if this is greater / than, equal / to, or less than
11、other public int isLargerThan(Relatable other); 如果你想比較兩個相似的對象的大小,不管該對象屬于什么類,這個類需要實現(xiàn)Relatable接口。只要有辦法可以比較對象的相對大小,任何類都可以實現(xiàn)Relatable接口。對字符串來說,可以比較字符數(shù);對書來說,可以比較頁數(shù);對學生來說,可以比較體重。對平面幾何對象來說,比較面積是很好的選擇;對三維對象來說,就需要比較體積了。所有以上的類都能實現(xiàn)int isLargerThan()方法。如果你知道某個類實現(xiàn)了Relatable接口,你可以比較從這個類實例化的對象了。Relatable接口的實現(xiàn)下面是一個
12、三角形類,它實現(xiàn)了Relatable接口。復制代碼 代碼如下:public class RectanglePlus implements Relatable public int width = 0; public int height = 0; public Point origin; / four constructors public RectanglePlus() origin = new Point(0, 0); public RectangleP(Point p) origin = p; public RectanglePlus(int w, int h) origin = new
13、 Point(0, 0); width = w; height = h; public RectanglePlus(Point p, int w, int h) origin = p; width = w; height = h; / a method for moving the rectangle public void move(int x, int y) origin.x = x; origin.y = y; / a method for computing / the area of the rectangle public int getArea() return width *
14、height; / a method required to implement / the Relatable interface public int isLargerThan(Relatable other) RectanglePlus otherRect = (RectanglePlus)other; if (this.getArea() otherRect.getArea() return 1; else return 0; 使用接口類型在你定義一個新的接口時,你其實在定義一個新的引用類型。在你能使用數(shù)據(jù)類型名稱的地方,都可以使用接口名稱。如果你定義了一個類型為接口的引用變量,該變量
15、能指向的對象所在的類必須實現(xiàn)了該接口。下例是一個在一對對象中返回較大對象的方法:復制代碼 代碼如下:public Object findLargest(Object object1, Object object2) Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if (obj1).isLargerThan(obj2) 0) return object1; else return object2; 通過把數(shù)據(jù)類型object1轉換成Relatable,對象obj1可以調(diào)用isLargerThan
16、方法。同理,只要是實現(xiàn)了Relatable的類,也可以使用下面的方法。復制代碼 代碼如下:public Object findSmallest(Object object1, Object object2) Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if (obj1).isLargerThan(obj2) 0) return object1; else return object2; public boolean isEqual(Object object1, Object object2
17、) Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if ( (obj1).isLargerThan(obj2) = 0) return true; else return false; 這些方法適用于任何“Relatable”的類,而無關它們的繼承關系。實現(xiàn)了Relatable的類,它們既屬于自身(或者父類)的類型,也屬于Relatable類型。這使得它們具有了多重繼承的優(yōu)點,因為它們可以同時具備父類和接口的行為。重寫接口假設你開發(fā)了一個接口名為DoIt:復制代碼 代碼如下:public in
18、terface DoIt void doSomething(int i, double x); int doSomethingElse(String s); 然后,你想加入一個新的方法在這個接口里,因此代碼變成:復制代碼 代碼如下:public interface DoIt void doSomething(int i, double x); int doSomethingElse(String s); boolean didItWork(int i, double x, String s); 如果你這么修改了,所有實現(xiàn)了舊的DoIt接口的類都會出錯,因為它們不再正確的實現(xiàn)這個接口。所有使用這個接口的程序員會嚴重抗議你的修改。你需要預估你的接口用戶的需求,并從開始就完善的設計好這個接口。但是這常常是無法做到的。另一個解決方法就是再寫一個接口。例如,你可以寫一個DoItPlus的接口繼承原有的接口。復制代碼 代碼如下:public interface DoItPlus exten
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源企業(yè)聘用合同范本4篇
- 二零二五年度人工智能輔助軟件服務合同模板2篇
- 二零二五美容院美容護理技術培訓合同3篇
- 《短視頻編?。哼x題構想+腳本制作+劇本策劃+鏡頭拍攝》課件 第5章 了解劇本:創(chuàng)作優(yōu)劇本的基礎
- 二零二五年度某局勞務分包結算與人才培養(yǎng)計劃合同4篇
- 二零二五農(nóng)機綠色生產(chǎn)技術研發(fā)與應用合同4篇
- 二零二五年度棉被品牌授權生產(chǎn)及銷售合同4篇
- 二零二五年度智能制造名義合伙人合同4篇
- 二零二五版南京海事法院海洋石油開發(fā)合同4篇
- (必會)公路水運工程助理試驗檢測師《交通工程》近年考試真題題庫(含答案解析)
- 七年級英語閱讀理解55篇(含答案)
- 臨床常見操作-灌腸
- 案例分析:美國紐約高樓防火設計課件
- 老客戶維護方案
- 移動商務內(nèi)容運營(吳洪貴)任務一 用戶定位與選題
- 萬科物業(yè)管理公司全套制度(2016版)
- 2021年高考化學真題和模擬題分類匯編專題20工業(yè)流程題含解析
- 工作證明模板下載免費
- (完整word)長沙胡博士工作室公益發(fā)布新加坡SM2考試物理全真模擬試卷(附答案解析)
- 機械點檢員職業(yè)技能知識考試題庫與答案(900題)
- 成熙高級英語聽力腳本
評論
0/150
提交評論