Java 抽象類和接口的總結

  1. 抽象類:含有abstract修飾符的class即爲抽象類。含有abstract方法的類,必須定義爲abstract類,但是abstract類可以沒有abstract方法。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義爲abstract類型。abstract類不能創建的實例對象
  2. 接口:可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認爲public abstract類型,接口中的成員變量類型默認爲public static final。
  3. 區別:

    1. 抽象類可以有構造方法,接口中不能有構造方法。
    2. 抽象類中可以有普通成員變量,接口中沒有普通成員變量
    3. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
    4. 抽象類中的抽象方法的訪問類型可以是public,protected和默認類型,但接口中的抽象方法只能是public類型的,並且默認即爲public abstract類型。
    5. 抽象類中可以包含靜態方法,接口中不能包含靜態方法
    6. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即爲public static final類型。
    7. 抽象類需要繼承,而接口需要實現,接口可以實現多個,而結成只能繼承一個。
  4. Java8新特性:以前,接口裏的方法要求全部是抽象方法,java8以後允許在接口裏定義默認方法和類方法(靜態方法)。

    1. 默認方法:第一種是默認方法。此方法使用了default關鍵字修飾方法名。實際上接口不包含任何實現的方法,而在Java 8中,可以通過使用default關鍵字來添加默認的方法實現。
      接口的實現類可以直接使用這些默認的方法,同時還可以重寫默認的方法,這不是強制性的重寫。
    public interface Java8InterfaceDemo {
        abstract void add();
        default void display(){
            System.out.println("default method of interface");
        }
    }
    1. 類方法(靜態方法):這一點與類中的靜態方法相似,可以在接口中使用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");
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章