Java——接口(interface)(概念理解+應用舉例)

1.概念理解

接口(英文:Interface),在 Java 語言中是一個抽象類型,是抽象方法的集合,接口通常用 interface 來聲明。一個類通過繼承接口的方式,從而來繼承並且實現接口中的抽象方法。

接口和類並不一樣,但是編寫接口的方式和類很相似,但是它們屬於不同的概念。類描述對象的屬性和方法。接口則包含類要實現的方法。

除非實現接口的類是抽象類,否則該類要定義並實現接口中的所有抽象方法。

接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明爲抽象類。另外,在 Java 語言中,接口類型可用來聲明一個變量,他們可以成爲一個空指針,或是被綁定在一個以此接口實現的對象。

1.1 接口與類的相似點

①一個接口可以有多個方法。

②接口文件保存在 .java 的源文件中,文件名使用接口名。 (如果此接口與其他類定義在同一個 .java 源文件下,則不會出現以此接口命名的 .java 源文件,只會出現包含 main 方法對應類名的 .java 源文件)

③接口的字節碼文件保存在 .class 結尾的二進制文件中。(無論此接口是否與其他類定義在同一個 .java 源文件下,只要編譯,就會生成所有的類名、接口名命名的 .class 字節碼文件)

關於②、③兩條內容,大家在創建相應的類、接口之後,可以在 bin 文件夾和 src 文件夾下查看相應的 .java、.class文件。

④接口相應的字節碼文件必須在與包名稱相匹配的目錄結構中。(如果是默認包,則在根目錄下)

1.2 接口與一般類的區別

①接口不能用於實例化對象,而類可以(不包括抽象類)。 

②接口沒有構造方法,接口中所有的方法必須是抽象方法。

③接口不能包含成員變量,除了 static 和 final 變量。

④接口不是被類繼承,而是要被類實現。(雖然我們要使用類去繼承接口,但實際上是對接口中的抽象方法的具體實現)

⑤接口支持多繼承,但是類不可以多繼承。

1.3 接口與抽象類的區別 

①抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。

②抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。 

③接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類中可以有靜態代碼塊和靜態方法。

④一個類只能繼承一個抽象類,而一個類卻可以(繼承)實現多個接口。

1.4 接口的特性 

①接口是隱式抽象的,當聲明一個接口的時候,不必使用 abstract 關鍵字。

②接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定爲 public abstract(只能是 public abstract,其他修飾符都會報錯),聲明時同樣不需要 abstract 關鍵字。

③接口中可以包含變量,但是接口中的變量會被隱式的指定爲 public static final 變量(並且只能是 public,用 private 修飾會報編譯錯誤)。

④接口中的方法是不能在接口中實現的,只能由實現這個接口的類來實現接口中的方法,接口中的方法都是公有的。

1.5 接口的實現

①當類實現接口的時候,類要實現接口中所有的方法。否則,該類必須聲明爲抽象的類。 

②類使用 implements 關鍵字實現接口。

下面,我們來看一下聲明接口以及使用類去實現接口的具體實例:👇👇👇

 

2.應用舉例 

2.1 類實現接口 

//文件名:LikeAnimal.java
public interface LikeAnimal {//聲明一個接口
	public void eat();//接口中的兩個公共方法
	public void travel();//等待繼承此接口的類來實現
}
//文件名:Tiger.java
public class Tiger implements LikeAnimal {//Tiger類繼承LikeAnimal接口
	public void eat() {//實現接口中的eat()抽象方法
		System.out.println("老虎正在喫飯!");
	}
	public void travel() {//實現接口中的travel()抽象方法
		System.out.println("老虎喜歡旅行!");
	}
	public String park() {//此類額外創建了一個新方法
		return "公園裏有很多隻老虎!";
	}
}
//文件名:PlayAnimal.java
public class PlayAnimal {
	public static void main(String[] args) {
		Tiger a=new Tiger();//實例化一個對象
		a.eat();//通過Tiger類對LikeAnimal接口中方法的具體實現,來調用這些方法
		a.travel();
		System.out.println(a.park());
	}
}

大家可以根據代碼以及相應的註釋,仔細理解一下,程序運行結果如下:👇👇👇

2.2 接口間的單繼承

類繼承接口,通過 implements 關鍵字來實現。

接口繼承接口,通過 extends 關鍵字來實現。(和類與類之間的繼承是一樣的)

//文件名:Sports.java
public interface Sports {
	public void play();
	public void happy();
	public int interesting(int a);
}
//文件名:Basketball.java
public interface Basketball extends Sports {
	public void perfect();
	public String together(String name1,String name2);
	public int friends(int x);
}
//文件名:Football.java
public interface Football extends Sports {
	public void good();
	public void nice();
}

在 Sports 接口中,自己聲明瞭 3 個方法,所以實現 Sports 接口的類需要編寫這 3 個方法。

在 Basketball 接口中,自己聲明瞭 3 個方法,並且從 Sports 接口中繼承了它的 3 個方法。所以實現 Basketball 接口的類需要編寫 3+3=6 個方法。

在 Football 接口中,自己聲明瞭2個方法,並且從 Sports 接口中繼承了它的3個方法。所以實現 Football 接口的類需要編寫 2+3=5 個方法。

2.3 接口間的多繼承

public interface Player extends Basketball,football {
    ...(具體的代碼段)
}

接口 Player 同時繼承了 Basketball,football 兩個接口。

這裏就不再詳細說了,大家知道接口間不僅可以單繼承,也可以多繼承就可以了,後面學習的過程中還是會用到的!!! 

2.4 標記接口

最常用的繼承接口是沒有包含任何方法的接口。

標記接口是沒有任何方法和屬性的接口,它僅僅表明它的類屬於一個特定的類型,供其他代碼來測試允許做一些事情。

標記接口作用:簡單形象的說就是給某個對象打個標(蓋個戳),使對象擁有某個或某些特權。

public interface Animal {

}

沒有任何方法的接口被稱爲標記接口。標記接口主要用於以下兩種目的:

①建立一個公共的父接口。②向一個類添加數據類型。


以上就是博主總結的 Java 語言中接口的一些相關概念,希望對大家的學習有所幫助。在後面的博文中,我們將進入“多態”的學習!!!😀😀😀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章