更新時間:2021-04-22 13:13:17 來源:動力節(jié)點(diǎn) 瀏覽1507次
接口是Java中的引用類型,它類似于類。它是抽象方法的集合。類實(shí)現(xiàn)接口,從而繼承接口的抽象方法。
除抽象方法外,接口還可以包含常量,默認(rèn)方法,靜態(tài)方法和嵌套類型。方法體僅適用于默認(rèn)方法和靜態(tài)方法。
編寫接口類似于編寫類。 但是一個類通常描述了對象的屬性和行為,而接口包含類實(shí)現(xiàn)的行為。
除非實(shí)現(xiàn)接口的類是抽象的,否則需要在類中定義接口的所有方法。
接口在以下方面類似于類 -
接口可以包含任意數(shù)量的方法。
接口編寫在擴(kuò)展名為.java的文件中,接口名稱與文件名相同。
接口的字節(jié)代碼保存在.class文件中。
如果接口在包中,對應(yīng)的字節(jié)碼文件必須位于與包名匹配的目錄結(jié)構(gòu)中。
但是,接口在幾個方面與一個類不同,包括 -
無法實(shí)例化接口。
接口不包含任何構(gòu)造函數(shù)。
接口中的所有方法都是抽象的。
接口不能包含實(shí)例字段,字段必須聲明為static和final。
接口不是由類擴(kuò)展的,它是由一個類實(shí)現(xiàn)的。
接口可以擴(kuò)展多個接口。
1.聲明接口
interface關(guān)鍵字用于聲明接口,它是一個聲明接口的簡單示例 -
示例
以下是接口的示例 -
/* 文件名稱 : NameOfInterface.java */
import java.lang.*;
// 其它 import 語句
public interface NameOfInterface {
// final, static 字段
// 其它 abstract 方法聲明
}//
接口具有以下屬性 -
接口是隱式抽象的。 聲明接口時不需要使用abstract關(guān)鍵字。
接口中的每個方法也是隱式抽象的,因此不需要abstract關(guān)鍵字。
接口中的方法是隱式公開(public)的。
示例
/* 文件名稱 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
2.實(shí)現(xiàn)接口
當(dāng)類實(shí)現(xiàn)接口時,可以將類視為簽署合約,同意執(zhí)行接口的特定行為。 如果類不執(zhí)行接口的所有行為,則類必須將聲明為抽象。
類使用implements關(guān)鍵字來實(shí)現(xiàn)接口。 implements關(guān)鍵字出現(xiàn)在聲明的extends部分之后的類聲明中。
示例
/* 文件名稱 : MammalInt.java */
public class MammalInt implements Animal {
// 實(shí)例接口中的 eat() 方法
public void eat() {
System.out.println("Mammal eats");
}
// 實(shí)例接口中的 travel() 方法
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();
}
}
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Mammal eats
Mammal travels
3.擴(kuò)展接口
接口可以擴(kuò)展另一個接口,就像類可以擴(kuò)展另一個類一樣。 extends關(guān)鍵字用于擴(kuò)展接口,子接口繼承父接口的方法。
以下兩個接口Hockey和Football分別擴(kuò)展了Sports接口。
示例
// 接口Sports,文件: Sports.java
public interface Sports {
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// 接口Football,擴(kuò)展了 `Sports`接口,文件: Football.java
public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// 接口Hockey,擴(kuò)展了 `Sports`接口,文件: Hockey.java
public interface Hockey extends Sports {
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
Hockey接口中共有四個方法,還有兩個方法是繼承過來的; 因此,實(shí)現(xiàn)Hockey接口的類需要實(shí)現(xiàn)所有六個方法。 同樣,實(shí)現(xiàn)Football接口的類需要定義來自Football接口中的三個方法和來自Sports接口中的兩個方法。
4.擴(kuò)展多個接口
Java類只能擴(kuò)展一個父類,不允許多重繼承。 但是,接口不是類,接口可以擴(kuò)展多個父接口。
extends關(guān)鍵字使用一次,父接口在逗號分隔列表中聲明。
例如,如果Hockey接口擴(kuò)展了Sports和Event接口,那么它的聲明是 -
public interface Hockey extends Sports, Event{
}
5.標(biāo)記接口
擴(kuò)展接口的最常見用法:當(dāng)父接口不包含任何方法時,這種用法也稱為標(biāo)記接口, 例如,java.awt.event包中的MouseListener接口擴(kuò)展了java.util.EventListener,它的定義為 -
package java.util;
public interface EventListener
{}
沒有方法的接口稱為標(biāo)記接口。標(biāo)記接口有兩個基本設(shè)計(jì)目的 -
創(chuàng)建公共父級 - 與EventListener接口(由Java API中的許多其他接口擴(kuò)展)一樣,可以使用標(biāo)記接口在一組接口中創(chuàng)建公共父級。 例如,當(dāng)接口擴(kuò)展EventListener時,JVM知道將在事件委托方案中使用此特定接口。
向類添加數(shù)據(jù)類型 - 這種情況是術(shù)語標(biāo)記的來源。 實(shí)現(xiàn)標(biāo)記接口的類不需要定義任何方法(因?yàn)榻涌跊]有任何方法),但是類通過多態(tài)變成了接口類型。
以上就是動力節(jié)點(diǎn)小編介紹的“Java接口詳解”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時為您服務(wù)。
初級 202925
初級 203221
初級 202629
初級 203743