Java基礎(chǔ):接口

目錄:
一、 接口的概念
二、 接口的聲明
三、 接口的實現(xiàn)
四、 接口中成員變量的特點
五、 接口中成員方法的特點
六、 類和接口的多實現(xiàn)
七、 接口的繼承
八、接口與類的區(qū)別:
九、 抽象類和接口的區(qū)別
十、 接口中的方法是否可以被重載和覆蓋?
十一、 接口的新特性——默認(rèn)方法和靜態(tài)方法(jdk8之后)
十二、 標(biāo)記接口


一、 接口的概念

  • 接口是功能的集合,同樣可看做是一種特殊的數(shù)據(jù)類型,是比抽象類更為抽象的
  • 接口只描述所應(yīng)該具備的方法,并沒有具體實現(xiàn),具體的實現(xiàn)由接口的實現(xiàn)類(相當(dāng)于接口的子類)來完成。這樣將功能的定義與實現(xiàn)分離,優(yōu)化了程序設(shè)計。
  • 記?。?code>一切事物均有功能,即一切事物均有接口

二、 接口的聲明

  • 使用 interface 代替了原來的 class 其他步驟與定義類相同
public interface 接口名稱 extends 其他的類/接口名 {  
        //聲明變量  
        //抽象方法  
}
  • 接口是隱式抽象的,當(dāng)聲明一個接口的時候,不必使用abstract關(guān)鍵字。

三、 接口的實現(xiàn)

  • 當(dāng)類實現(xiàn)接口的時候,類要實現(xiàn)接口中所有的方法。否則,類必須聲明為抽象類。
  • 類使用implements關(guān)鍵字實現(xiàn)接口.
  • 一個類如果實現(xiàn)接口, 有兩種操作方法:
    • 實現(xiàn)類為非抽象類, 就需要重寫接口中所有的抽象方法.
    • 實現(xiàn)類為抽象類, 可以不重寫接口中的抽象方法。
class 類 implements 接口1,接口2... {
    //重寫接口中方法
} 

四、 接口中成員變量的特點

  • 接口中無法定義普通的成員變量.
  • 接口中定義的變量,必須有固定的修飾符修飾public static final ,所以接口中的變量也稱之為常量,其值不能改變。

static 可以被類名、接口名直接調(diào)用
final 最終,固定住變量的值

  • public static final 在接口中可以省略不寫,也可以選擇性寫,但是不代表沒有.
  • 接口中的成員變量必須顯式初始化.
interface Demo { ///定義一個名稱為Demo的接口。
    public static final int NUM = 3;// NUM的值不能改變
}

五、 接口中成員方法的特點

  • 接口中的成員都是 public 的,不能指定其它的訪問控制修飾符
  • 接口中成員方法定義的固定格式: public abstract 返回值類型 方法名字(參數(shù)列表)
  • 子類必須覆蓋接口中所有的抽象方法后,子類才可以實例化,否則子類是一個抽象類。

六、 類和接口的多實現(xiàn)

  • 類和接口的多實現(xiàn)是接口最重要的體現(xiàn):解決多繼承的弊端。將多繼承這種機制在 java 中通過多實現(xiàn)完成了。

多繼承的弊端
多繼承時,當(dāng)多個父類中有相同功能時,子類調(diào)用會產(chǎn)生不確定性。
其實核心原因就是在于多繼承父類中功能有主體,而導(dǎo)致調(diào)用運行時,不確定運行哪個主體內(nèi)容。

  • 為什么多實現(xiàn)能解決? 因為接口中的功能都沒有方法體,都是由子類/實現(xiàn)類重寫來明確

七、 接口的繼承

  • 一個接口能繼承另一個接口,和類之間的繼承方式比較相似。接口的繼承使用extends關(guān)鍵字,子接口繼承父接口的方法。
  • 在Java中,類的多繼承是不合法,但接口允許多繼承。

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

  • 接口不能用于實例化對象。
  • 接口沒有構(gòu)造方法。
  • 接口中所有的方法必須是抽象方法。
  • 接口不能包含普通成員變量,除了 staticfinal 變量。
  • 接口不是被類繼承了,而是要被類實現(xiàn)。
  • 接口支持多繼承。

九、 抽象類和接口的區(qū)別

1. 相同點
  • 抽象類和接口都位于繼承的頂端,用于被其他類實現(xiàn)或繼承.
  • 不能直接實例化對象.
  • 都包含抽象方法,其子類都必須覆蓋這些抽象方法.
2. 區(qū)別
  • 抽象類中的方法可以有方法體,就是能實現(xiàn)方法的具體功能,但是接口中的方法不行。
  • 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final類型的。
  • 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
  • 一個類只能繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口。
3. 二者的選擇:
  • 優(yōu)先選用接口,盡量少用抽象類;
  • 需要定義子類的行為,又要為子類提供共性功能時才選用抽象類;

十、 接口中的方法是否可以被重載和覆蓋?

  • 重載: 對于接口中的方法重載,重載條件和普通類沒有任何區(qū)別,只是重載的方法沒有方法體
  • 覆蓋: 接口中的方法也可以覆蓋(Override),但沒有實際的意義,因為接口中不提供方法的實現(xiàn)

十一、 接口的新特性——默認(rèn)方法和靜態(tài)方法(jdk8之后)

1. 默認(rèn)方法
  • 可以在不影響已有類的情況下,修改接口
  • 可以有方法實現(xiàn)
  • 父類中的默認(rèn)方法可以被子接口繼承
  • 子接口可以覆蓋父接口中的默認(rèn)方法,甚至還可以把父接口中的默認(rèn)方法覆蓋為抽象方法
  • 實現(xiàn)接口后,因為默認(rèn)方法不是抽象方法,所以可以不重寫,但是如果開發(fā)需要,也可以重寫
  • 默認(rèn)方法使用default 關(guān)鍵字,只能通過接口實現(xiàn)類的對象來調(diào)用。
  • 注意:默認(rèn)方法的訪問權(quán)限也是默認(rèn)public
2. 靜態(tài)方法
  • 可以有方法實現(xiàn)
  • 可以直接通過接口名來訪問
  • 靜態(tài)方法沒有方法覆蓋,因為靜態(tài)方法沒有運行時多態(tài)
interface Test{
    //這個是默認(rèn)方法
    default String get(String aa){
        System.out.println("我是jdk1.8默認(rèn)實現(xiàn)方法...");
        return "";
    }   
    //這個是靜態(tài)方法    
    static void staticmethod(){
        System.out.println("我是靜態(tài)方法");
    }
}
3. 注意事項
  • 接口默認(rèn)方法、靜態(tài)方法可以有多個
  • 默認(rèn)方法通過實例調(diào)用,靜態(tài)方法通過接口名調(diào)用。
  • default 默認(rèn)方法關(guān)鍵字只能用在接口中。
  • 默認(rèn)方法可以被繼承,如果繼承了多個接口,多個接口都定義了多個同樣的默認(rèn)方法,實現(xiàn)類需要重寫默認(rèn)方法不然會報錯。
  • 靜態(tài)方法不能被繼承及覆蓋,所以只被具體所在的接口調(diào)用。

十二、 標(biāo)記接口

  • 標(biāo)記接口是沒有任何方法和屬性的接口.
  • 它僅僅表明它的類屬于一個特定的類型,供其他代碼來測試允許做一些事情。
  • 標(biāo)記接口作用:簡單形象的說就是給某個對象打個標(biāo)(蓋個戳),使對象擁有某個或某些特權(quán)。
  • 例如:java.awt.event 包中的 MouseListener 接口繼承的 java.util.EventListener 接口定義如下:
package  java.util; 
public  interface  EventListener  {

}
  • 標(biāo)記接口主要用于以下兩種目的
    • 建立一個公共的父接口
      正如EventListener接口,這是由幾十個其他接口擴展的Java API,你可以使用一個標(biāo)記接口來建立一組接口的父接口。 例如:當(dāng)一個接口繼承了EventListener接口,Java虛擬機(JVM)就知道該接口將要被用于一個事件的代理方案。

    • 向一個類添加數(shù)據(jù)類型
      這種情況是標(biāo)記接口最初的目的,實現(xiàn)標(biāo)記接口的類不需要定義任何接口方法(因為標(biāo)記接口根本就沒有方法),但是該類通過多態(tài)性變成一個接口類型。

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

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