接口
軟件工程中存在許多情況,當(dāng)不同的程序員團(tuán)隊(duì)同意一份“合約”來(lái)闡明他們的軟件如何交互時(shí)很重要,每個(gè)組都應(yīng)該能夠在不知道如何編寫其他組代碼的情況下編寫代碼,一般來(lái)說(shuō),接口就是這樣的合約。
例如,想象一個(gè)未來(lái)主義社會(huì),計(jì)算機(jī)控制的機(jī)器人汽車在沒有人工操作員的情況下將乘客運(yùn)送到城市街道,汽車制造商編寫操作汽車的軟件(當(dāng)然是Java) - 停止,啟動(dòng),加速,向左轉(zhuǎn),等等,另一個(gè)工業(yè)集團(tuán),電子制導(dǎo)儀器制造商,使計(jì)算機(jī)系統(tǒng)接收GPS(全球定位系統(tǒng))位置數(shù)據(jù)和無(wú)線傳輸交通狀況,并利用該信息來(lái)駕駛汽車。
汽車制造商必須發(fā)布一個(gè)行業(yè)標(biāo)準(zhǔn)的接口,詳細(xì)說(shuō)明可以調(diào)用什么方法來(lái)使汽車移動(dòng)(任何汽車,來(lái)自任何制造商),然后,指導(dǎo)制造商可以編寫調(diào)用接口中描述的方法的軟件來(lái)命令汽車,工業(yè)集團(tuán)都不需要知道其他集團(tuán)的軟件是如何實(shí)現(xiàn)的,事實(shí)上,每個(gè)小組都認(rèn)為其軟件具有高度專有性,并保留隨時(shí)修改它的權(quán)利,只要它繼續(xù)遵守已發(fā)布的接口即可。
Java中的接口在Java編程語(yǔ)言中,接口是類似于類的引用類型,它只能包含常量、方法簽名,默認(rèn)方法、靜態(tài)方法和嵌套類型,方法體僅適用于默認(rèn)方法和靜態(tài)方法,接口無(wú)法實(shí)例化 — 它們只能由類實(shí)現(xiàn)或由其他接口繼承,繼承將在本課程后面討論。
定義接口類似于創(chuàng)建新類:
public interface OperateCar { // constant declarations, if any // method signatures // An enum with values RIGHT, LEFT int turn(Direction direction, double radius, double startSpeed, 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 }
請(qǐng)注意,方法簽名沒有大括號(hào),并以分號(hào)結(jié)束。
要使用接口,請(qǐng)編寫實(shí)現(xiàn)該接口的類,當(dāng)可實(shí)例化的類實(shí)現(xiàn)接口時(shí),它為接口中聲明的每個(gè)方法提供方法體,例如:
public class OperateBMW760i implements OperateCar { // the OperateCar method signatures, with implementation -- // for example: int signalTurn(Direction direction, boolean signalOn) { // code to turn BMW"s LEFT turn indicator lights on // code to turn BMW"s LEFT turn indicator lights off // code to turn BMW"s RIGHT turn indicator lights on // code to turn BMW"s RIGHT turn indicator lights off } // other members, as needed -- for example, helper classes not // visible to clients of the interface }
在上面的機(jī)器人汽車示例中,汽車制造商將實(shí)現(xiàn)該接口,當(dāng)然,雪佛蘭的實(shí)現(xiàn)將與豐田的實(shí)現(xiàn)大不相同,但兩家制造商都將遵循相同的接口,作為該接口的客戶,導(dǎo)航制造商將構(gòu)建使用汽車位置GPS數(shù)據(jù)、數(shù)字街道地圖和交通數(shù)據(jù)驅(qū)動(dòng)汽車的系統(tǒng),這樣,導(dǎo)航系統(tǒng)將調(diào)用接口方法:轉(zhuǎn)彎,改變車道,制動(dòng),加速等。
接口作為API機(jī)器人汽車示例顯示了用作行業(yè)標(biāo)準(zhǔn)應(yīng)用程序編程接口(API)的接口,API在商業(yè)軟件產(chǎn)品中也很常見,通常,公司銷售的軟件包包含另一家公司希望在其自己的軟件產(chǎn)品中使用的復(fù)雜方法。一個(gè)例子是銷售給制作最終用戶圖形程序的公司的數(shù)字圖像處理方法包,圖像處理公司編寫其類以實(shí)現(xiàn)接口,該接口向其客戶公開,然后,圖形公司使用接口中定義的簽名和返回類型調(diào)用圖像處理方法。雖然圖像處理公司的API是公開的(對(duì)其客戶),但它的API實(shí)現(xiàn)仍然是一個(gè)嚴(yán)密保密的秘密 — 實(shí)際上,只要它繼續(xù)實(shí)現(xiàn)其客戶所依賴的原始接口,它可以在以后修改實(shí)現(xiàn)。
接口總結(jié)接口聲明可以包含方法簽名、默認(rèn)方法、靜態(tài)方法和常量定義,具有實(shí)現(xiàn)的方法只是默認(rèn)和靜態(tài)方法。
實(shí)現(xiàn)接口的類必須實(shí)現(xiàn)接口中聲明的所有方法。
可以在任何可以使用類型的地方使用接口名稱。
上一篇:注解 下一篇:定義接口文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72551.html
Java? 教程 Java教程是為JDK 8編寫的,本頁(yè)面中描述的示例和實(shí)踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
集合介紹 本節(jié)介紹Java集合框架,在這里,你將了解集合是什么以及它們?nèi)绾问鼓愕墓ぷ鞲p松、程序更好,你將了解構(gòu)成Java集合框架的核心元素 — 接口、實(shí)現(xiàn)、聚合操作和算法。 集合 — 有時(shí)稱為容器 — 只是一個(gè)將多個(gè)元素組合到一個(gè)單元中的對(duì)象,集合用于存儲(chǔ)、檢索、操作和傳遞聚合數(shù)據(jù)。通常,它們代表形成自然組的數(shù)據(jù)項(xiàng),例如撲克牌(卡片集合)、郵件文件夾(信件集合)或電話目錄(名稱到電話號(hào)碼的映射)...
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨(dú)立于其表示的細(xì)節(jié)來(lái)操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請(qǐng)注意,層次結(jié)構(gòu)...
定義接口 接口聲明由修飾符、關(guān)鍵字interface、接口名稱、逗號(hào)分隔的父接口列表(如果有)和接口體組成,例如: public interface GroupedInterface extends Interface1, Interface2, Interface3 { // constant declarations // base of natural logar...
Queue接口 Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊(duì)列還提供額外的插入、刪除和檢查操作,Queue接口如下。 public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remov...
閱讀 1854·2021-11-22 12:09
閱讀 1512·2019-08-30 13:22
閱讀 2142·2019-08-29 17:00
閱讀 2685·2019-08-29 16:28
閱讀 3003·2019-08-26 13:51
閱讀 1234·2019-08-26 13:25
閱讀 3303·2019-08-26 12:14
閱讀 3066·2019-08-26 12:14