更新時(shí)間:2022-10-18 11:49:35 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1572次
接口是 Java 中的引用類型。它類似于類。它是抽象方法的集合。一個(gè)類實(shí)現(xiàn)了一個(gè)接口,從而繼承了接口的抽象方法。
除了抽象方法,接口還可以包含常量、默認(rèn)方法、靜態(tài)方法和嵌套類型。方法體僅存在于默認(rèn)方法和靜態(tài)方法。
編寫接口類似于編寫類。但是一個(gè)類描述了一個(gè)對(duì)象的屬性和行為。接口包含類實(shí)現(xiàn)的行為。
除非實(shí)現(xiàn)接口的類是抽象類,否則接口的所有方法都需要在類中定義。
接口在以下方面類似于類 -
一個(gè)接口可以包含任意數(shù)量的方法。
接口寫在擴(kuò)展名為.java的文件中,接口的名稱與文件的名稱匹配。
接口的字節(jié)碼出現(xiàn)在.class文件中。
接口出現(xiàn)在包中,其對(duì)應(yīng)的字節(jié)碼文件必須在與包名匹配的目錄結(jié)構(gòu)中。
但是,接口在幾個(gè)方面與類不同,包括
您不能實(shí)例化接口。
接口不包含任何構(gòu)造函數(shù)。
接口中的所有方法都是抽象的。
接口不能包含實(shí)例字段??梢猿霈F(xiàn)在接口中的唯一字段必須聲明為靜態(tài)和最終的。
接口不被類擴(kuò)展;它由一個(gè)類實(shí)現(xiàn)。
一個(gè)接口可以擴(kuò)展多個(gè)接口。
interface關(guān)鍵字用于聲明接口。這是一個(gè)聲明接口的簡(jiǎn)單示例
例子
以下是一個(gè)界面示例
/* 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\
}
接口具有以下屬性
接口是隱式抽象的。聲明接口時(shí)不需要使用abstract關(guān)鍵字。
接口中的每個(gè)方法也是隱式抽象的,因此不需要 abstract 關(guān)鍵字。
接口中的方法是隱式公開的。
例子
/* File name : Animal.java */
interface Animal {
public void eat();
public void travel();
}
當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)接口時(shí),你可以把這個(gè)類看作是簽訂了一份契約,同意執(zhí)行接口的具體行為。如果一個(gè)類不執(zhí)行接口的所有行為,則該類必須將自己聲明為抽象。
類使用implements關(guān)鍵字來實(shí)現(xiàn)接口。implements 關(guān)鍵字出現(xiàn)在聲明的擴(kuò)展部分之后的類聲明中。
例子
/* 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();
}
}
這將產(chǎn)生以下結(jié)果
輸出
Mammal eats
Mammal travels
當(dāng)覆蓋接口中定義的方法時(shí),需要遵循幾個(gè)規(guī)則 -
除了接口方法聲明的方法或接口方法聲明的子類之外,不應(yīng)在實(shí)現(xiàn)方法上聲明受檢異常。
重寫方法時(shí)應(yīng)保持接口方法的簽名和相同的返回類型或子類型。
實(shí)現(xiàn)類本身可以是抽象的,如果是,則不需要實(shí)現(xiàn)接口方法。
實(shí)現(xiàn)接口時(shí),有幾條規(guī)則
一個(gè)類一次可以實(shí)現(xiàn)多個(gè)接口。
一個(gè)類只能擴(kuò)展一個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口。
一個(gè)接口可以擴(kuò)展另一個(gè)接口,就像一個(gè)類可以擴(kuò)展另一個(gè)類一樣。
一個(gè)接口可以擴(kuò)展另一個(gè)接口,就像一個(gè)類可以擴(kuò)展另一個(gè)類一樣。extends關(guān)鍵字用于擴(kuò)展接口,子接口繼承父接口的方法。
以下 Sports 接口由 Hockey 和 Football 接口擴(kuò)展。
例子
// 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 接口有四個(gè)方法,但它從 Sports 繼承了兩個(gè);因此,實(shí)現(xiàn) Hockey 的類需要實(shí)現(xiàn)所有六個(gè)方法。同樣,實(shí)現(xiàn) Football 的類需要定義 Football 中的三個(gè)方法和 Sports 中的兩個(gè)方法。
Java 類只能擴(kuò)展一個(gè)父類。不允許多重繼承。然而,接口不是類,一個(gè)接口可以擴(kuò)展多個(gè)父接口。
extends 關(guān)鍵字只使用一次,父接口在逗號(hào)分隔的列表中聲明。
例如,如果 Hockey 接口同時(shí)擴(kuò)展了 Sports 和 Event,它將被聲明為 -
例子
public interface Hockey extends Sports, Event
當(dāng)父接口不包含任何方法時(shí),最常使用擴(kuò)展接口。例如,java.awt.event 包中的 MouseListener 接口擴(kuò)展了 java.util.EventListener,其定義為 -
例子
package java.util;
public interface EventListener
{}
沒有方法的接口稱為標(biāo)記接口。標(biāo)記接口有兩個(gè)基本的設(shè)計(jì)目的 -
Creates a common parent - 與由 Java API 中的許多其他接口擴(kuò)展的 EventListener 接口一樣,您可以使用標(biāo)記接口在一組接口中創(chuàng)建一個(gè)公共父級(jí)。例如,當(dāng)一個(gè)接口擴(kuò)展 EventListener 時(shí),JVM 知道該特定接口將用于事件委托場(chǎng)景。
將數(shù)據(jù)類型添加到類- 這種情況是術(shù)語標(biāo)簽的來源。實(shí)現(xiàn)標(biāo)記接口的類不需要定義任何方法(因?yàn)榻涌跊]有任何方法),但類通過多態(tài)成為Java接口類型。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743