抽象類和接口都是在必定程度上體現到了java的多態特性。那麼在使用場景上,它們有什麼區別呢?java
1.由abstract關鍵詞修飾的類稱之爲抽象類。 2.抽象類中沒有實現的方法稱之爲抽象方法,也須要加關鍵字abstract。 3.抽象類中也能夠沒有抽象方法,好比HttpServlet方法。 4.抽象類中能夠有已經實現的方法,能夠定義成員變量。
1.由interface關鍵詞修飾的稱之爲接口; 2.接口中能夠定義成員變量,可是這些成員變量默認都是public static final的常量。 3.接口中沒有已經實現的方法,所有是抽象方法。 4.一個類實現某一接口,必須實現接口中定義的全部方法。 5.一個類能夠實現多個接口。
類在繼承抽象類的時候,一個兒子一個爹,爹的財產(非abstract方法和屬性)我都繼承,同時爹的夢想(abstract方法)我幫他去實現。
類在使用接口就像是一個模塊化的機器,安上個音頻接口,內部就得作個功放功能。我設計好了要按什麼接口就得有什麼功能。ide
抽象類的更像是一種樹形結構,我一個抽象類的範圍就是我下面的子類,別的我管不着也不必管。
接口的更像是一種層間結構,我上層跟下層的溝通辦法就是這個接口,上層想怎麼調用就按照接口調用就行模塊化
按照邏輯順序,通常先設計了接口,後寫類,又由於類變多了,才抽象出了抽象類方便寫更多的類。
接口定義了類的功能,抽象類抽象出了一些類的特徵。優化
抽象類提升了類和類的內聚程度,減小了代碼量。
接口下降了類和類的耦合度,可是增長了代碼量。設計
抽象類和接口的使用均可以優化程序,實現高內聚,低耦合。說了這麼多,其實按照設計順序不會有這倆概念上的混淆,何時該用哪一個,其實很清楚。code