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 語言中接口的一些相關概念,希望對大家的學習有所幫助。在後面的博文中,我們將進入“多態”的學習!!!😀😀😀