- 抽象類:含有abstract修飾符的class即爲抽象類。含有abstract方法的類,必須定義爲abstract類,但是abstract類可以沒有abstract方法。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義爲abstract類型。abstract類不能創建的實例對象
- 接口:可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認爲public abstract類型,接口中的成員變量類型默認爲public static final。
區別:
- 抽象類可以有構造方法,接口中不能有構造方法。
- 抽象類中可以有普通成員變量,接口中沒有普通成員變量
- 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
- 抽象類中的抽象方法的訪問類型可以是public,protected和默認類型,但接口中的抽象方法只能是public類型的,並且默認即爲public abstract類型。
- 抽象類中可以包含靜態方法,接口中不能包含靜態方法
- 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即爲public static final類型。
- 抽象類需要繼承,而接口需要實現,接口可以實現多個,而結成只能繼承一個。
Java8新特性:以前,接口裏的方法要求全部是抽象方法,java8以後允許在接口裏定義默認方法和類方法(靜態方法)。
- 默認方法:第一種是默認方法。此方法使用了default關鍵字修飾方法名。實際上接口不包含任何實現的方法,而在Java 8中,可以通過使用default關鍵字來添加默認的方法實現。
接口的實現類可以直接使用這些默認的方法,同時還可以重寫默認的方法,這不是強制性的重寫。
public interface Java8InterfaceDemo { abstract void add(); default void display(){ System.out.println("default method of interface"); } }
- 類方法(靜態方法):這一點與類中的靜態方法相似,可以在接口中使用static關鍵字定義靜態方法。如果我們要調用接口定義的靜態方法,只需使用接口名就可以訪問這些靜態方法
public interface Java8InterfaceDemo { abstract void add(); default void display(){ System.out.println("default method of interface"); } public static void show(){ System.out.println("static method of interface"); } }
- 默認方法:第一種是默認方法。此方法使用了default關鍵字修飾方法名。實際上接口不包含任何實現的方法,而在Java 8中,可以通過使用default關鍵字來添加默認的方法實現。
Java 抽象類和接口的總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.