Java中引進的介面

最好的文醬發表於2020-09-28

抽象類是從多個類中抽象出來的模板,如果將這種抽象進行的更加徹底一點,就可以提煉出一種更加特殊的“抽象類”—— 介面(interface)

  • 介面的概念
    我們在日常生活中經常會遇見到介面,這種實體類事物,比如:我們使用USB介面可以連線U盤,不可以用別的介面連線U盤,因此,USB介面就是定義的一個規範。我們在Java中所定義的介面也是遵循這樣一種方法來的,介面定義了某一批類所需要遵守的規範,介面並不關心這些類的內部實現方法細節,它只規定了這批類必須提供的方法。因此介面定義的是多個類共同的公共的行為規範,這些行為是與外部交流的通道,這就意味著介面裡通常是定義一組公用的方法。
  • 介面的定義
    介面和類的定義不同,我們不使用class關鍵字來定義介面,而是使用interface關鍵字來定義介面。我們來看一下介面定義的基本語法規則:
public interface MyInterface {
    //這裡的public關鍵字可以換成其他的修飾符用來定義,
}

修飾符可以是public或者預設,如果省略了public關鍵字,則預設採用包許可權的訪問控制符,即只有在相同包結構下才可以訪問介面。
介面名應與類名採用相同的語法規則,每個單詞首字母應該大寫,使用的詞語應該見名知意。
一個介面可以有多個直接父類,但介面只能繼承介面,不能繼承類。

public interface MyInterface {
    private int a = 1;//此語法是錯誤的
    {
        
        int b = 1;
    }
    public MyInterface(){
	}
}

由於介面定義的是一種規範,因此介面裡不能包含構造器和初始化定義。介面中只能包含成員變數(只能是靜態的)、方法(只能是抽象例項方法,類方法。預設方法或者私有方法)、內部類定義。

public interface MyInterface {
    int a = 1;//靜態的成員變數
    class abs {
        
        
    }//內部類
    
    enum status {
        
    }//內部列舉類
    void findArea();//抽象方法
}

我們上面定義的成員變數沒有新增任何關鍵字,但是沒有報錯,其實在系統中會自動為這些成員變數增加static 和final兩個修飾符,也就是說,不管是否使用 public static final修飾符,介面中的成員變數總是使用這三個修飾符來修飾。而且介面中沒有程式碼塊和內部類,因此我們在介面中的成員變數只能在定義時指定預設值。

public interface MyInterface {
    int a = 1;
    public static final int  b =2;
    }

上面的程式碼中兩個定義的成員變數的方法都是可以的,介面裡定義的方法只能是抽象方法,類方法,預設方法和私有方法,因此如果不是定義預設方法、類方法或者私有方法,系統會為普通方法增加abstract修飾符;介面中的方法總是使用 public abstract 關鍵字來修飾。介面中的普通方法不能有方法體。

public interface MyInterface {
    void findArea();
    public abstract void set();
}

上面的這兩種定義方法都是可以的。

相關文章