1. 程式人生 > >(JavaSE)十五、介面與實現

(JavaSE)十五、介面與實現

什麼是介面:

硬體介面:指的是兩個硬體裝置之間的連線方式。硬體介面既包括物理上的介面,還包括邏輯上的資料傳送協議。 軟體介面:程式程式碼,特殊的類,表示一種規範,是具有的N個方法的特徵集合

介面只定義了類應當遵循的規範卻不關心這些類的內部資料和其功能的實現細節站在程式角度上介面只規定了類裡必須提供的方法,從而分離了規範和實現,增強了系統的可拓展性和可維護性。

規範和實現相分離的好處:主機板上提供了USB插槽,只要一個遵循了USB規範的滑鼠,就可以插入USB插槽,並與主機板正常通訊。至於這個滑鼠是誰生產的,內部是如何實現的,主機板都不需要關心(只要遵循了USB規範就可以插在主機板上使用)。

Java中的介面:

專家說的多個抽象類的抽象就是介面.

簡單來說Java中最小的程式單元就是類,介面其實是一個特殊的類.

               Java中的介面表示規範,用於定義一組抽象方法,表示某一類事物必須具備的功能,要求實現類必須來實現該介面並提供方法實現

定義介面語法

[public]   interface   介面名{

                  抽象方法

              }

介面存在的成員:

     1):介面中沒有構造器,推論介面不能建立物件(不能 new ),介面中不能定義普通方法.

     2):介面中定義的成員變數

,實質是全域性靜態常量,預設使用  public static final來修飾.

              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,抽象類預設是預設包訪問許可權。