1.什么是接口?
官方概述:
在java語言中,接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統一格式進行定義。
這種技術主要用來描述類具有什么功能,而並不給出每個類的具體實現。
Balabalabala……..
博主概述:接口是類的行為的抽象概述。
你的概述:用一句你自己能聽懂的話,將接口的概念概括一下,然后記在心里。(不必太復雜,不必特准確,重點是你自己一定要理解這句話!)
舉個栗子:
在項目開發MVC分層的結構中,在Service層,我們常常使用到接口的方式。
例如:我們編寫一個關於訂單的Service;
步驟是:先創建一個接口,再編寫其接口實現類。
在定義接口方法時,將各種“行為”抽象成方法,此處:創建,查詢,取消,完結,支付均是行為!
public interface OrderService { /** * 創建訂單 */ OrderDTO create(OrderDTO orderDTO); /** * 查詢單個訂單 */ OrderDTO findOne(String orderId); /** * 查詢訂單列表 */ Page<OrderDTO> findList(String openId, Pageable pageable); /** * 取消訂單 */ OrderDTO cancel(OrderDTO orderDTO); /** * 完結訂單 */ OrderDTO finish(OrderDTO orderDTO); /** * 支付訂單 */ OrderDTO paid(OrderDTO orderDTO); }
所以說,我們已經知道了我們將要去干什么,但至於怎么干,具體的怎么做,我們交給接口的實現類去做!
2.使用接口的好處
可擴展性好
比如項目需要做一個訂單模塊,首先后端leader創建了一個訂單的接口(定義了規范),然后把該接口具體怎么實現交給了小a來做,小a開始進行實現類的編寫(接口的第一個實現類),但是過了很久以后,后端leader覺得小a寫的這個實現類不太滿意,想找人重新寫訂單模塊。那么此時,接口的可擴展性就體現了出來,領導找到了小b,而小b只需要根據該接口重新創建一個類(接口的第二個實現類),並將該訂單接口定義的所有方法重新實現一遍,就達到了重寫訂單模塊的目的。而項目其他部分對訂單模塊的引用並不受到影響,因為其他模塊對訂單模塊引用的是“接口”,而不是具體的實現類。
舉個栗子:
Service層:
訂單接口 :OrderService
訂單接口實現類 : OrderServiceImpl
Controller層:
private OrderService orderService;(對Service層的調用)
此處注意:聲明的是接口,而不是其實現類,你理解了嗎?
接口的多實現是Java多態的一種表現;
3.使用接口的注意點
自上而下分析(我個人的一個小技巧,先考慮是否是類和其關鍵字,然后按照類的組成部分,自上而下:構造器,域,方法,然后與其相關的類;按照這種規律來進行分析,屢試不爽)
1.接口不是類
2.接口關鍵字:interface 類實現接口關鍵字:implements
3.接口沒有構造方法
4.接口不能被實例化
5.接口的成員變量都是public,static,final修飾(默認)
6.接口的方法都是public,abstract修飾(默認)(1.8以后方法可以加static關鍵字,但必須有方法體)
7.接口的實現類必須實現接口所有的方法
4.接口與抽象類的區別?
依舊自上而下分析
1.抽象類是類,接口不是類。(感覺自己說了句廢話)
2.抽象類的關鍵字是abstract修飾,接口的關鍵字是interface修飾。(感覺自己又說了句廢話)
3.抽象類有構造方法,接口沒有構造方法。(但兩者均不能被實例化,用我自己的話來概括就是,兩者都是抽象派,沒有具體的實際行為,所以不允許它們實例化!)
4.抽象類的成員變量修飾隨便(public,private,protected等等),接口的成員變量必須是public,static,final修飾(默認)(可以用來做定義常量的類)
5.抽象類的方法可以是普通方法,也可以是抽象方法。接口的方法必須是public,abstract修飾(默認)(1.8以后方法可以加static關鍵字,但必須有方法體)
6.抽象類的所有方法需要被子類全部實現(有一種情況例外,除非子類也是抽象類,其實就是把實現的責任又傳遞了下去);
接口的所有方法必須被它的實現類全部實現(沒有例外)
7.最重要的一點,此處畫重點,抽象類是單繼承,接口是多實現;
接口與抽象類的使用場景:
抽象類是對本質屬性的抽象;
舉個栗子:
父抽象類:人 子類:男人
接口是對行為的抽象;
舉個栗子:
接口中的一個方法:創建訂單() 實現類1: 第一種具體的創建過程 實現類2:第二種具體的創建過程
如果此時的你,還是不太明白接口到底是什么,那我再舉一個可能不太恰當的例子:
接口,顧名思義,它是個口,hahh,現在,低下你的頭,把你電腦的USB插入口想象成是一個接口,這個接口可以插入三星的U盤,可以插入閃迪的U盤,可以插入8g的,也可以插入16g的,但是有一個重要前提:這些U盤需要滿足這個接口所定義的規范,而接口的另一端。電腦內部直接對接的是接口,而不是這些U盤(接口實現類)。
第一次寫博客,如果有哪里寫的不對,不夠嚴謹,希望大家多多指正,我會認真反思。
最后, 浮於表面看千遍,不如自己思一遍!
希望這篇文章對你能夠起到幫助!