抽象類和介面的區別 精華版

2022-08-29 19:45:15 字數 1434 閱讀 3238

抽象類

:1. 如果乙個函式沒有方法體,那麼該函式必須要使用abstract修飾,把該函式修飾成抽象 的函式。。

2. 如果乙個類出現了抽象的函式,那麼該類也必須 使用abstract修飾。

3. 如果乙個非抽象類繼承了抽象類,那麼必須要把抽象類的所有抽象方法全部實現。

4. 抽象類可以存在非抽象方法,也可以存在抽象的方法.

5. 抽象類可以不存在抽象方法的。 

6. 抽象類是不能建立物件的。

疑問:為什麼抽象類不能建立物件呢?

因為抽象類是存在抽象方法的,如果能讓抽象類建立物件的話,那麼使用抽象的物件

呼叫抽象方法是沒有任何意義的。

7. 抽象類是存在建構函式的,其建構函式是提供給子類建立物件的時候初始化父類的屬性的。

1. 類實現介面可以通過implements實現,實現介面的時候必須把介面中的所有方法實現,乙個類可以實現多個介面。

2. 介面中定義的所有的屬性預設是public static final的,即靜態常量既然是常量,那麼定義的時候必須賦值。

3. 介面中定義的方法不能有方法體。介面中定義的方法預設新增public abstract

4. 有抽象函式的不一定是抽象類,也可以是介面類。

5. 由於介面中的方法預設都是抽象的,所以不能被例項化。

6. 對於介面而言,可以使用子類來實現介面中未被實現的功能函式。

7. 如果實現類中要訪問介面中的成員,不能使用super關鍵字。因為兩者之間沒有顯示的繼承關係,況且介面中的成員成員屬性是靜態的。可以使用介面名直接訪問。

8. 介面沒有構造方法。

9.當乙個類實現介面時,如果這個類是抽象類,則實現介面中的部分方法即可,否者需要實現介面中的所有方法。

10.乙個類通過implements關鍵字實現介面時,可以實現多個介面,被實現的多個介面之間要用逗號隔開。

11.乙個介面可以通過extends關鍵字繼承多個介面,介面之間用逗號隔開。

12.乙個類在繼承另乙個類的同時還可以實現介面,此時,extends關鍵字必須位於implements關鍵字前。

區別:1.抽象類可以有構造方法,介面中不能有構造方法。

2.抽象類中可以有普通成員變數,介面中沒有普通成員變數

3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

4.抽象類中的抽象方法的訪問型別可以是 public,protected,但介面中的抽象方法只能是 public 型別的,並且預設即為 public abstract 型別。

5.抽象類中可以包含靜態方法,介面中不能包含靜態方法

6.抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可

以任意,但介面中定義的變數只能是 public static final 型別,並且預設即為 public static final 型別。

7.乙個類可以實現多個介面,但只能繼承乙個抽象類。

抽象類和介面的區別

要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於 是 的關係 而介面是定義行為規範,因此對於實現介面的子類來說,相對於介面來說,是 行為需要按照介面來完成 這些聽起來有些虛,舉個例...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...