Java中的接口(什么是接口击罪,接口的好處哲嘲,具體的使用)
1.什么是接口?
官方概述:
在java語言中媳禁,接口不是類眠副,而是對類的一組需求描述,這些類要遵從接口描述的統(tǒng)一格式進行定義竣稽。
這種技術(shù)主要用來描述類具有什么功能囱怕,而并不給出每個類的具體實現(xiàn)。
Balabalabala……..
博主概述:接口是類的行為的抽象概述毫别。
你的概述:用一句你自己能聽懂的話娃弓,將接口的概念概括一下,然后記在心里岛宦。(不必太復(fù)雜台丛,不必特準確,重點是你自己一定要理解這句話@巍)
舉個栗子:
在項目開發(fā)MVC分層的結(jié)構(gòu)中挽霉,在Service層,我們常常使用到接口的方式变汪。
例如:我們編寫一個關(guān)于訂單的Service侠坎;
步驟是:先創(chuàng)建一個接口,再編寫其接口實現(xiàn)類疫衩。
在定義接口方法時硅蹦,將各種“行為”抽象成方法荣德,此處:創(chuàng)建,查詢童芹,取消涮瞻,完結(jié),支付均是行為假褪!
public interface OrderService {
? ? /**
? ? * 創(chuàng)建訂單
? ? */
? ? OrderDTO create(OrderDTO orderDTO);
? ? /**
? ? * 查詢單個訂單
? ? */
? ? OrderDTO findOne(String orderId);
? ? /**
? ? * 查詢訂單列表
? ? */
? ? Page<OrderDTO> findList(String openId, Pageable pageable);
? ? /**
? ? * 取消訂單
? ? */
? ? OrderDTO cancel(OrderDTO orderDTO);
? ? /**
? ? * 完結(jié)訂單
? ? */
? ? OrderDTO finish(OrderDTO orderDTO);
? ? /**
? ? * 支付訂單
? ? */
? ? OrderDTO paid(OrderDTO orderDTO);
}
所以說署咽,我們已經(jīng)知道了我們將要去干什么,但至于怎么干生音,具體的怎么做宁否,我們交給接口的實現(xiàn)類去做!
2.使用接口的好處
可擴展性好
? ? ? 比如項目需要做一個訂單模塊缀遍,首先后端leader創(chuàng)建了一個訂單的接口(定義了規(guī)范)慕匠,然后把該接口具體怎么實現(xiàn)交給了小a來做,小a開始進行實現(xiàn)類的編寫(接口的第一個實現(xiàn)類)域醇,但是過了很久以后台谊,后端leader覺得小a寫的這個實現(xiàn)類不太滿意,想找人重新寫訂單模塊譬挚。那么此時锅铅,接口的可擴展性就體現(xiàn)了出來,領(lǐng)導(dǎo)找到了小b减宣,而小b只需要根據(jù)該接口重新創(chuàng)建一個類(接口的第二個實現(xiàn)類)盐须,并將該訂單接口定義的所有方法重新實現(xiàn)一遍,就達到了重寫訂單模塊的目的漆腌。而項目其他部分對訂單模塊的引用并不受到影響贼邓,因為其他模塊對訂單模塊引用的是“接口”,而不是具體的實現(xiàn)類闷尿。
舉個栗子:
Service層:
訂單接口 :OrderService
訂單接口實現(xiàn)類 : OrderServiceImpl
Controller層:
private OrderService orderService;(對Service層的調(diào)用)
此處注意:聲明的是接口立帖,而不是其實現(xiàn)類,你理解了嗎悠砚?
接口的多實現(xiàn)是Java多態(tài)的一種表現(xiàn);
3.使用接口的注意點
自上而下分析(我個人的一個小技巧堂飞,先考慮是否是類和其關(guān)鍵字灌旧,然后按照類的組成部分,自上而下:構(gòu)造器绰筛,域枢泰,方法,然后與其相關(guān)的類;按照這種規(guī)律來進行分析铝噩,屢試不爽)
1.接口不是類
2.接口關(guān)鍵字:interface? ? 類實現(xiàn)接口關(guān)鍵字:implements
3.接口沒有構(gòu)造方法
4.接口不能被實例化
5.接口的成員變量都是public,static,final修飾(默認)
6.接口的方法都是public,abstract修飾(默認)(1.8以后方法可以加static關(guān)鍵字衡蚂,但必須有方法體)
7.接口的實現(xiàn)類必須實現(xiàn)接口所有的方法
4.接口與抽象類的區(qū)別?
依舊自上而下分析
1.抽象類是類,接口不是類毛甲。(感覺自己說了句廢話)
2.抽象類的關(guān)鍵字是abstract修飾年叮,接口的關(guān)鍵字是interface修飾。(感覺自己又說了句廢話)
3.抽象類有構(gòu)造方法玻募,接口沒有構(gòu)造方法只损。(但兩者均不能被實例化,用我自己的話來概括就是七咧,兩者都是抽象派跃惫,沒有具體的實際行為,所以不允許它們實例化0啊)
4.抽象類的成員變量修飾隨便(public,private,protected等等)爆存,接口的成員變量必須是public,static,final修飾(默認)(可以用來做定義常量的類)
5.抽象類的方法可以是普通方法,也可以是抽象方法蝗砾。接口的方法必須是public,abstract修飾(默認)(1.8以后方法可以加static關(guān)鍵字先较,但必須有方法體)
6.抽象類的所有方法需要被子類全部實現(xiàn)(有一種情況例外,除非子類也是抽象類遥诉,其實就是把實現(xiàn)的責(zé)任又傳遞了下去)拇泣;
接口的所有方法必須被它的實現(xiàn)類全部實現(xiàn)(沒有例外)
7.最重要的一點,此處畫重點矮锈,抽象類是單繼承霉翔,接口是多實現(xiàn);
接口與抽象類的使用場景:
抽象類是對本質(zhì)屬性的抽象;
舉個栗子:
父抽象類:人? ? ? ? ? 子類:男人
? 接口是對行為的抽象苞笨;
舉個栗子:
接口中的一個方法:創(chuàng)建訂單()? ? 實現(xiàn)類1: 第一種具體的創(chuàng)建過程? ? ? 實現(xiàn)類2:第二種具體的創(chuàng)建過程
如果此時的你债朵,還是不太明白接口到底是什么,那我再舉一個可能不太恰當?shù)睦樱?/p>
接口瀑凝,顧名思義序芦,它是個口,hahh,現(xiàn)在粤咪,低下你的頭谚中,把你電腦的USB插入口想象成是一個接口,這個接口可以插入三星的U盤寥枝,可以插入閃迪的U盤宪塔,可以插入8g的,也可以插入16g的囊拜,但是有一個重要前提:這些U盤需要滿足這個接口所定義的規(guī)范某筐,而接口的另一端。電腦內(nèi)部直接對接的是接口冠跷,而不是這些U盤(接口實現(xiàn)類)南誊。