抽象類別:
1. 如果一個類中有一個或者多個抽象方法,那麼此類必須聲明為抽象類別,不能被執行個體化。
2. 如果從一個抽象類別繼承,並想建立該新類的對象,那麼就必須為基類中所有抽象方法提供方法定義。
如果不這麼做,那麼倒出類也是抽象類別,並且編譯器會強制添加關鍵字abstract。
public abstract class AbstractClass //裡面至少有一個抽象方法{ public int t; //普通資料成員 public abstract void method1(); //抽象方法,抽象類別的子類在類中必須實現抽象類別中的抽象方法 public abstract void method2(); public void method3(); //非抽象方法 public int method4(); public int method4 (){ …… //抽象類別中可以賦予非抽象方法方法的預設行為,即方法的具體實現 } public void method3(){ …… //抽象類別中可以賦予非抽象方法方法的預設行為,即方法的具體實現 } }
介面:
1. 一旦實現了某個介面,其實就變成了一個常規的類,可以任意去擴充它。
2. 介面中沒有任何方法是聲明為public的,應為它們預設就是public的。
在介面中聲明的屬性都預設是final和static的。
public interface Interface{ static final int i; //介面中不能有普通資料成員,只能夠有靜態不能被修改的資料成員,static表示全域,final表示不可修改,可以不用static final 修飾,會隱式的聲明為static和final public void method1(); //介面中的方法一定是抽象方法,所以不用abstract修飾 public void method2(); //介面中不能賦予方法的預設行為,即不能有方法的具體實現}
總結:
簡言之抽象類別是一種功能不全的類,介面只是一個抽象方法聲明和靜態不能被修改的資料的集合,兩者都不能被執行個體化。
從某種意義上說,介面是一種特殊形式的抽象類別,在java語言中抽象類別表示的是一種繼承關係,一個類只能繼承繼承一個抽象類別,而一個類卻可以實現多個介面。在許多情況下,介面確實可以代替抽象類別,如果你不需要刻意表達屬性上的繼承的話。