Java 面象對(duì)象之接口

1.接口的定義

接口(Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。

接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。

接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來(lái)聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。

1.1接口與類相似點(diǎn):

一個(gè)接口可以有多個(gè)方法。
接口文件保存在 .java 結(jié)尾的文件中,文件名使用接口名。
接口的字節(jié)碼文件保存在 .class 結(jié)尾的文件中。
接口相應(yīng)的字節(jié)碼文件必須在與包名稱相匹配的目錄結(jié)構(gòu)中。

1.2接口與類的區(qū)別:

接口不能用于實(shí)例化對(duì)象。
接口沒(méi)有構(gòu)造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了 static 和 final 變量。
接口不是被類繼承,而是被類實(shí)現(xiàn)。
接口支持多繼承。

1.3接口和抽象類的區(qū)別:

抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法的具體功能,但是接口中的方法不行。
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。

2.接口的聲明

public interface JavaInterface {
    public void eat();
}

3.接口的實(shí)現(xiàn)

當(dāng)類實(shí)現(xiàn)接口的時(shí)候,類要實(shí)現(xiàn)接口中所有的方法。否則,類必須聲明為抽象的類。類使用implements關(guān)鍵字實(shí)現(xiàn)接口。在類聲明中,implements關(guān)鍵字放在class聲明后面。

public class JavaInterfaceClass {
    public static void main(String[] args) {
        DogInterfaceClass dog = new DogInterfaceClass();
        dog.eat();
        dog.run();
    }
}

//實(shí)現(xiàn)了JavaInterface接口的DogInterfaceClass類
class DogInterfaceClass implements JavaInterface
{
    @Override
    public void eat() {
        System.out.println("Dog Eat");
    }

    public void run() {
        System.out.println("Dog Run");
    }
}

重寫接口中聲明的方法時(shí),需要注意以下規(guī)則:
類在實(shí)現(xiàn)接口的方法時(shí),不能拋出強(qiáng)制性異常,只能在接口中,或者繼承接口的抽象類中拋出該強(qiáng)制性異常。
類在重寫方法時(shí)要保持一致的方法名,并且應(yīng)該保持相同或者相兼容的返回值類型。
如果實(shí)現(xiàn)接口的類是抽象類,那么就沒(méi)必要實(shí)現(xiàn)該接口的方法。

在實(shí)現(xiàn)接口的時(shí)候,也要注意一些規(guī)則:
一個(gè)類只能繼承一個(gè)類,但是能實(shí)現(xiàn)多個(gè)接口。
一個(gè)接口能繼承另一個(gè)接口,這和類之間的繼承比較相似。

4.接口的繼承

一個(gè)接口能繼承另一個(gè)接口,和類之間的繼承方式比較相似。接口的繼承使用extends關(guān)鍵字,子接口繼承父接口的方法。

public interface JavaInterface {
    public void eat();
}

public interface AnimalInterface extends JavaInterface {
    public void sport();
}

注意:接口和類不同的是可以多繼承

public interface JavaInterface {
    public void eat();
}

public interface AnimalInterface extends JavaInterface {
    public void sport();
}

public interface CatInterface extends JavaInterface,AnimalInterface {
    public void eatFish();
}

5.標(biāo)記接口

最常用的繼承接口是沒(méi)有包含任何方法的接口。標(biāo)記接口是沒(méi)有任何方法和屬性的接口.它僅僅表明它的類屬于一個(gè)特定的類型,供其他代碼來(lái)測(cè)試允許做一些事情。

標(biāo)記接口作用:簡(jiǎn)單形象的說(shuō)就是給某個(gè)對(duì)象打個(gè)標(biāo)(蓋個(gè)戳),使對(duì)象擁有某個(gè)或某些特權(quán)。

例如:java.awt.event 包中的 MouseListener 接口繼承的 java.util.EventListener 接口定義如下:

package java.util;
public interface EventListener {}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容