更新時間:2022-10-18 11:49:35 來源:動力節點 瀏覽1719次
接口是 Java 中的引用類型。它類似于類。它是抽象方法的集合。一個類實現了一個接口,從而繼承了接口的抽象方法。
除了抽象方法,接口還可以包含常量、默認方法、靜態方法和嵌套類型。方法體僅存在于默認方法和靜態方法。
編寫接口類似于編寫類。但是一個類描述了一個對象的屬性和行為。接口包含類實現的行為。
除非實現接口的類是抽象類,否則接口的所有方法都需要在類中定義。
接口在以下方面類似于類 -
一個接口可以包含任意數量的方法。
接口寫在擴展名為.java的文件中,接口的名稱與文件的名稱匹配。
接口的字節碼出現在.class文件中。
接口出現在包中,其對應的字節碼文件必須在與包名匹配的目錄結構中。
但是,接口在幾個方面與類不同,包括
您不能實例化接口。
接口不包含任何構造函數。
接口中的所有方法都是抽象的。
接口不能包含實例字段。可以出現在接口中的唯一字段必須聲明為靜態和最終的。
接口不被類擴展;它由一個類實現。
一個接口可以擴展多個接口。
interface關鍵字用于聲明接口。這是一個聲明接口的簡單示例
例子
以下是一個界面示例
/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements
public interface NameOfInterface {
// Any number of final, static fields
// Any number of abstract method declarations\
}
接口具有以下屬性
接口是隱式抽象的。聲明接口時不需要使用abstract關鍵字。
接口中的每個方法也是隱式抽象的,因此不需要 abstract 關鍵字。
接口中的方法是隱式公開的。
例子
/* File name : Animal.java */
interface Animal {
public void eat();
public void travel();
}
當一個類實現一個接口時,你可以把這個類看作是簽訂了一份契約,同意執行接口的具體行為。如果一個類不執行接口的所有行為,則該類必須將自己聲明為抽象。
類使用implements關鍵字來實現接口。implements 關鍵字出現在聲明的擴展部分之后的類聲明中。
例子
/* File name : MammalInt.java */
public class MammalInt implements Animal {
public void eat() {
System.out.println("Mammal eats");
}
public void travel() {
System.out.println("Mammal travels");
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
這將產生以下結果
輸出
Mammal eats
Mammal travels
當覆蓋接口中定義的方法時,需要遵循幾個規則 -
除了接口方法聲明的方法或接口方法聲明的子類之外,不應在實現方法上聲明受檢異常。
重寫方法時應保持接口方法的簽名和相同的返回類型或子類型。
實現類本身可以是抽象的,如果是,則不需要實現接口方法。
實現接口時,有幾條規則
一個類一次可以實現多個接口。
一個類只能擴展一個類,但可以實現多個接口。
一個接口可以擴展另一個接口,就像一個類可以擴展另一個類一樣。
一個接口可以擴展另一個接口,就像一個類可以擴展另一個類一樣。extends關鍵字用于擴展接口,子接口繼承父接口的方法。
以下 Sports 接口由 Hockey 和 Football 接口擴展。
例子
// Filename: Sports.java
public interface Sports {
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// Filename: Football.java
public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// Filename: Hockey.java
public interface Hockey extends Sports {
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
Hockey 接口有四個方法,但它從 Sports 繼承了兩個;因此,實現 Hockey 的類需要實現所有六個方法。同樣,實現 Football 的類需要定義 Football 中的三個方法和 Sports 中的兩個方法。
Java 類只能擴展一個父類。不允許多重繼承。然而,接口不是類,一個接口可以擴展多個父接口。
extends 關鍵字只使用一次,父接口在逗號分隔的列表中聲明。
例如,如果 Hockey 接口同時擴展了 Sports 和 Event,它將被聲明為 -
例子
public interface Hockey extends Sports, Event
當父接口不包含任何方法時,最常使用擴展接口。例如,java.awt.event 包中的 MouseListener 接口擴展了 java.util.EventListener,其定義為 -
例子
package java.util;
public interface EventListener
{}
沒有方法的接口稱為標記接口。標記接口有兩個基本的設計目的 -
Creates a common parent - 與由 Java API 中的許多其他接口擴展的 EventListener 接口一樣,您可以使用標記接口在一組接口中創建一個公共父級。例如,當一個接口擴展 EventListener 時,JVM 知道該特定接口將用于事件委托場景。
將數據類型添加到類- 這種情況是術語標簽的來源。實現標記接口的類不需要定義任何方法(因為接口沒有任何方法),但類通過多態成為Java接口類型。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習