(JavaSE)十五、介面與實現
什麼是介面:
硬體介面:指的是兩個硬體裝置之間的連線方式。硬體介面既包括物理上的介面,還包括邏輯上的資料傳送協議。 軟體介面:程式程式碼,特殊的類,表示一種規範,是具有的N個方法的特徵集合。
介面只定義了類應當遵循的規範,卻不關心這些類的內部資料和其功能的實現細節。站在程式角度上說介面只規定了類裡必須提供的方法,從而分離了規範和實現,增強了系統的可拓展性和可維護性。
規範和實現相分離的好處:主機板上提供了USB插槽,只要一個遵循了USB規範的滑鼠,就可以插入USB插槽,並與主機板正常通訊。至於這個滑鼠是誰生產的,內部是如何實現的,主機板都不需要關心(只要遵循了USB規範就可以插在主機板上使用)。
Java中的介面:
專家說的:多個抽象類的抽象就是介面.
簡單來說:在Java中最小的程式單元就是類,介面其實是一個特殊的類.
Java中的介面表示規範,用於定義一組抽象方法,表示某一類事物必須具備的功能,要求實現類必須來實現該介面並提供方法實現
定義介面語法:
[public] interface 介面名{
抽象方法
}
介面存在的成員:
1):介面中沒有構造器,推論:介面不能建立物件(不能 new ),介面中不能定義普通方法.
2):介面中定義的成員變數
public static final String NAME = "龍17";
3):介面中定義的方法都是公共的抽象方法,預設的使用 public abstract 來修飾方法.
public abstract void walk(); 一般的,我們在介面中定義方法,不喜歡使用修飾符.
4):介面中定義的內部類都是公共的靜態內部類,預設使用public static來修飾內部類.
public static interface ABC{}
介面的特點和介面的繼承:
介面的特點:
① 沒有構造方法,也不能顯示定義構造器,不能例項化。
② 介面只能繼承介面,不能繼承類,且介面支援多繼承(類是單繼承關係)。
[修飾符] interface 介面名 extends 介面1,介面2
③ 接口裡的方法方法全是抽象的,預設修飾符是public abstract。
④ 接口裡的欄位全是全域性靜態常量,預設修飾符是public static final。
⑤ 接口裡的內部類全是公共靜態的,預設修飾符是public static。
---------------------------------------
類和類之間存在是繼承關係: 使用extends 來表示.
介面和介面之間只能是繼承關係: 使用extends 來表示.
介面和實現類之間只能是實現關係(繼承關係),使用implements來表示.
--------------------------------------
定義一個走路的介面:
interface IWalk{
void walk();
};
定義一個貓類實現該介面:
class Cat implements IWalk{
@Override
public void walk() {
System.out.println("貓咪,走貓步");
}
}
測試類:
public class Test1 {
public static void main(String[] args) {
IWalk w = new Cat();//面向介面程式設計,存在多型
w.walk();//體現多型特徵:執行Cat類中的walk方法
}
}
介面與抽象類的區別:
相同點:
1):都位於繼承的頂端,用於被其他實現或繼承。
2):都不能例項化。
3):都可以定義抽象方法,其子類/實現類都必須覆寫這些抽象方法。
不同:
1):介面沒有構造方法,抽象類有構造方法。
2):抽象類可包含普通方法和抽象方法,介面只能包含抽象方法(Java8之前);
3):一個類只能繼承一個直接父類(可能是抽象類),介面是多繼承的並且只支援一個類實現多個介面(介面彌補了Java的單繼承)。
4):成員變數:接口裡預設是public static final,抽象類是預設包許可權。
5):方法:接口裡預設是public abstract,抽象類預設是預設包訪問許可權。
6):內部類:接口裡預設是public static,抽象類預設是預設包訪問許可權。