1. 程式人生 > >繼承抽象類和介面的區別

繼承抽象類和介面的區別

前言:

       抽象類和介面都是在一定程度上體現到了java的多型特性。那麼在使用場景上,它們有什麼區別呢?

在語法方面: 

       抽象類:

1.由abstract關鍵詞修飾的類稱之為抽象類。 
             2.抽象類中沒有實現的方法稱之為抽象方法,也需要加關鍵字abstract。 
             3.抽象類中也可以沒有抽象方法,比如HttpServlet方法。 
             4.抽象類中可以有已經實現的方法,可以定義成員變數。

      介面: 
             1.由interface關鍵詞修飾的稱之為介面; 
             2.介面中可以定義成員變數,但是這些成員變數預設都是public static final

的常量。 
             3.介面中沒有已經實現的方法,全部是抽象方法。 
             4.一個類實現某一介面,必須實現介面中定義的所有方法。 
             5.一個類可以實現多個介面。

在使用方面: 

類在繼承抽象類的時候,一個兒子一個爹,爹的財產(非abstract方法和屬性)我都繼承,同時爹的夢想(abstract方法)我幫他去實現。

     類在使用介面就像是一個模組化的機器,安上個音訊介面,內部就得做個功放功能。我設計好了要按什麼介面就得有什麼功能。

在結構方面: 

      抽象類的更像是一種樹形結構,我一個抽象類的範圍就是我下面的子類,別的我管不著也沒必要管。

      介面的更像是一種層間結構,我上層跟下層的溝通辦法就是這個介面,上層想怎麼呼叫就按照介面呼叫就行。

在邏輯方面: 

     按照邏輯順序,一般先設計了介面,後寫類,又因為類變多了,才抽象出了抽象類方便寫更多的類。

     介面定義了類的功能,抽象類抽象出了一些類的特徵。

在程式碼書寫方面: 

    抽象類提高了類和類的內聚程度,減少了程式碼量。

    介面降低了類和類的耦合度,但是增加了程式碼量。

總結:

    抽象類和介面的使用都可以優化程式,實現高內聚,低耦合。說了這麼多,其實按照設計順序不會有這倆概念上的混淆,什麼時候該用哪個,其實很清楚。

補充

       

     這張圖為java集合類的大致關係結構,這裡面更形象具體的描述了介面和抽象類的使用情況,這個繼承關係代表了總是先出現介面,再出現程式碼,再抽象類。