1. 程式人生 > >interface 與abstract class(介面 與 抽象類)的特點以及區別,以及應用場景

interface 與abstract class(介面 與 抽象類)的特點以及區別,以及應用場景

一、抽象類(abstract)

1、抽象類不能被例項化,如果例項化就會報錯,編譯無法通過。只有抽象類的非抽象子類可以建立物件。

2、抽象類中不一定含有抽象方法,但是有抽象方法的類一定是抽象類。

3、抽象類中的抽象方法只能宣告,不包含方法體,就是不會給出方法的具體實現。

4、構造方法、類方法(用static修飾的方法)不能宣告為抽象方法。

5、抽象類的子類必須給出抽象類中抽象方法的具體實現,除非子類也是抽象類。

二、介面(interface)

1、介面可以多繼承

2、介面中的方法必須是public abstract,即便不寫預設也是。

3、接口裡面不包含方法的具體實現,即介面中的所有方法都必須是抽象方法。

4、類繼承介面必須實現接口裡面宣告的全部方法,除非該類是抽象類。

5、介面不可以被例項化,但可以被實現類建立。

三、抽象類與介面的相同點

1、兩者都是抽象類,都不能被例項化。

2、介面的實現類及抽象類的子類都必須實現已經宣告的抽象方法(當然啦,除非介面的實現類及抽象類的子類也是抽象的

四、抽象類與介面的區別

1、抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是介面中的方法不行。

2、抽象類中的成員變數可以是各種型別的,但是介面中的只能是public static final型別的。

3、一個類只能繼承一個抽象類,而但是可以實現多個介面。

4、介面需要實現,用implements;而抽象類需要繼承,用extends。

5、介面中的方法必須都實現,而抽象類中的方法可以選擇性的實現。

五、什麼時候使用抽象類和介面

1、如果擁有一些方法並且想讓它們中的一些預設實現,就用抽象類。

2、如果想實現多繼承,就必須要用介面。由於Java中不支援多繼承,子類不能夠繼承多個類,但可以實現多個介面。

3、如果基本功能不斷改變,那麼要使用抽象類。因為不斷改變功能時,用介面的話,就需要改變所有實現了該介面的類。