Java中的接口(什么是接口,接口的好處,具體的使用)


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盤(接口實現類)。

 

 


 

第一次寫博客,如果有哪里寫的不對,不夠嚴謹,希望大家多多指正,我會認真反思。

最后, 浮於表面看千遍,不如自己思一遍!

希望這篇文章對你能夠起到幫助!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM