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 關係區別 類與類 繼承,單繼承 類與介面 實現,單實現,多實現 介面與介面 繼承,單繼承,多繼承...