Java 介面和抽象類的區別

2021-08-21 02:10:48 字數 2013 閱讀 8027

class表示的是"is-a"關係,inte***ce表示的是"like-a"關係。

抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。

例如:男人,女人,這兩個類,他們的抽象類是人。

人可以吃東西,狗也可以吃東西;可以把「吃東西」定義成乙個介面,然後讓這些類去實現它。

在高階語言上,乙個類只能繼承乙個類(抽象類)(正如人不可能同時是男人和女人),但是人可以實現多個介面(吃飯介面、走路介面)。

區別&舉例

1、抽象類和介面都不能直接例項化。如果要例項化,抽象類變數必須指向實現所有抽象方法的子類物件,介面變數必須指向實現所有介面方法的類物件。

2、抽象類要被子類繼承,介面要被類實現。

ex:有乙個抽象類

animal和乙個介面fly

public class bird extends animal implements fly

public class bird2 implements fly

public class cat extends animal

public class dog extends animal

3、繼承抽象類和實現介面的類都必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。

介面只能做方法申明,不能有實現方法。抽象類中可以做方法申明,也可以做方法實現。

ex:介面fly申明了方法fly() 和flyfly()

抽象類 animal申明了方法cry() 和cry2(),實現了方法introduce()

4、介面裡定義的變數只能是公共的靜態的常量,抽象類中的變數是普通變數。

抽象類可以有具體的方法和屬性,介面只能有抽象方法和不可變常量。

5、抽象類裡的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。

ex:抽象類animal被類cat繼承,cat只實現了cry方法時,此時cat類會報錯。

6、同樣,乙個類實現介面的時候,如不能全部實現介面方法,那麼該類也只能為抽象類。

ex:介面fly被類bird實現,bird只實現了fly方法時,此時bird類會報錯。

7、抽象類裡可以沒有抽象方法。如果乙個類裡有抽象方法,那麼這個類只能是抽象類。

8、抽象方法只能申明,不能實現。抽象方法要被實現,所以不能是靜態的,也不能是私有的。

9、介面可繼承介面,並可多繼承介面。抽象類只能使用一次繼承關係。

10、介面中定義的變數預設是public static

final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。

抽象類中的變數預設是 friendly型,其值可以在子類中重新定義,也可以重新賦值。

介面中的方法預設都是 public,abstract型別的。

11.在abstract class

中可以有自己的資料成員,也可以有非abstarct的成員方法,而在inte***ce中,只能夠有靜態的不能被修改的資料成員(也就是必須是static

final的,不過在inte***ce中一般不定義資料成員),所有的成員方法都是abstract的。

輸出:貓叫:喵喵~

i can cry

this is class cat

貓叫:喵喵~

this is class cat

狗叫:汪汪~

i can cry

this is class animal

狗叫:汪汪~

i can cry

this is class animal

鳥鳴~鳥鳴~

i can fly

i can fly fly

Java介面和抽象類區別

abstract class inte ce 繼承性單繼承 多實現方法 抽象方法 具體方法 抽象方法 filed 宣告 使用filed欄位 建立的為靜態常量 final static 訪問許可權 public protected private或package public 構造器有 無介面特點 a...

Java 介面和抽象類的區別

1 抽象類可以有構造方法 介面不可以有構造方法 2 抽象類可以有普通成員變數 介面不可以有普通成員變數 3 抽象類可以包含普通非抽象的方法 介面中所有方法都必須是抽象的,不能有非抽象的普通方法 4 抽象類下的抽象方法訪問型別可以是public protected 但介面的訪問型別必須是public,...

java介面和抽象類的區別

抽象類和介面的區別?1 成員區別 抽象類 成員變數 可以是變數,也可以是常量 成員方法 可以抽象,也可以非抽象 建構函式 有 介面 成員變數 只能是常量 成員方法 只可以抽象 建構函式 沒有建構函式 2 關係區別 類與類 繼承,單繼承 類與介面 實現,單實現,多實現 介面與介面 繼承,單繼承,多繼承...