最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中間的接口用法詳解

 更新時間:2023年07月21日 10:20:13   作者:二進制狂人  
Java 程序員都知道要面向接口編程,那 Java? 中的接口除了定義接口方法之外還能怎么用你知道嗎,今天小編就來帶大家看一下 Java 中間的接口還可以有哪些用法,需要的朋友可以參考下

基本特性

我們先看一下接口的基本特性

  • 接口的定義需要使用關(guān)鍵字interface;
  • 接口定義的所有方法默認都是public abstract;
  • 當一個具體的class? 去實現(xiàn)一個interface?時,需要使用implements 關(guān)鍵字;
  • 接口之間是可以多繼承,而類是只能單繼承的;

如下所示,我們定義一個接口;

package com.example.demo.inter;
import java.io.Serializable;
import java.util.RandomAccess;
public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
}

默認方法

在 JDK 8? 之前接口是不支持默認方法的,在 JDK 8? 之后接口支持默認方法,默認方法采用關(guān)鍵詞 default 聲明。

public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
  default String sayHello3() {
    return "hello3";
  }
}

默認方法跟抽象方法不一樣,接口中定義的抽象方法,當接口被其他類實現(xiàn)的時候都需要全部實現(xiàn),但是默認方法是不需要被實現(xiàn)就可以直接使用的,類似于直接調(diào)用父類的方法一樣,所以在很多時候,我們已經(jīng)繼承了一個類,還想有一個能用但是不想每個子類都實現(xiàn)的方法的時候,就可以考慮增加一個接口的默認方法來使用,簡單來說就是實現(xiàn)類可以不覆寫 default 方法。

default方法存在的目的是,在我們已經(jīng)完善的項目中,如果我們直接給一個接口增加一個方法,在沒有默認方法的時候就需要給所有的實現(xiàn)類都實現(xiàn)對應(yīng)的方法,但是這個方法又不一定是每個實現(xiàn)類都需要的,所以這個時候默認方法就很好的解決了這個問題,我們只需要增加一個默認方法,然后在需要使用的實現(xiàn)類中進行實現(xiàn)或者使用就可以了,其他的實現(xiàn)類不需要改動任何的代碼。

標記

接口還有一個很常見的功能那就是標記功能,這么說可能你沒有印象,但是提到序列化接口 java.io.Serializable;? 你肯定知道,我們經(jīng)常在對應(yīng)的 POJO 中都會實現(xiàn)這個序列化接口,而這個序列化的接口如果看過源碼的小伙伴肯定知道里面是沒有內(nèi)容的。

同樣的功能除了序列化的接口,類似的空間接口還有很多,比如 java.util.RandomAccess? 也是空間接口,之前阿粉也寫過關(guān)于 RandomAccess? 這個接口的用途,感興趣的可以再去看看。RandomAccess 明明是個空接口,能有什么用呢?

通過源碼我們可以知道 RandomAccess 是用來標識子類是否實現(xiàn)了該接口,如果實現(xiàn)了則走實現(xiàn)了的邏輯,沒有實現(xiàn)就走沒有實現(xiàn)的邏輯,所以我們在日常開發(fā)中也可以利用這個特性,當我們有不同的子類需要根據(jù)情況進行不同的實現(xiàn)邏輯的時候就可以采用定義一個空接口來標記一下,方便后面的處理。

靜態(tài)方法

跟默認方法一樣,JDK 8 還支持在接口中增加靜態(tài)方法,雖然說在接口中定義靜態(tài)方法的做法不常見,但是當需要使用的時候也是可以支持的,避免在創(chuàng)建一個單獨的工具類,跟在類中定義的靜態(tài)方法一樣,我們可以直接通過接口名稱引用靜態(tài)方法,當然靜態(tài)變量也是可以的,使用方法一樣。

public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
  default String sayHello3() {
    System.out.println(sayHello4());
    return "hello3";
  }
  public static String sayHello4() {
    return "hello4";
  }
}

私有方法

大家有沒有注意到,上面不管是默認方法還是靜態(tài)方法其實都是 public? 公開的,可以讓實現(xiàn)類或者其他類直接使用,那有沒有可能在接口中定義一個私有方法呢?在 JDK 9? 之前是不可以的,JDK 9 卻支持了,如下所示

private void privateMethod() {
    System.out.println("private私有方法被調(diào)用");
  }
  private static void privateStaticMethod() {
    System.out.println("private私有靜態(tài)方法被調(diào)用");
  }

從官方的文檔中我們可以找到下面的描述,在 JDK 9 中接口支持私有方法,主要用于不同的非抽象方法中共享代碼。

我們可以看到在 JDK 9 這樣寫是可以的

但是在 JDK8? 就不行了,是無法編譯通過的,會提示不允許使用 private 修飾符。

總結(jié)

今天小編給大家總結(jié)了一個接口的使用方法,后面在日常的開發(fā)中我們不單單只是在接口中定義抽象方法,也可以根據(jù)需求增加默認方法或者私有方法,以及在需要用到標記的時候也可以通過定義一個空接口來實現(xiàn),怎么樣是不是很棒,感覺動起來吧

以上就是Java中間的接口用法詳解的詳細內(nèi)容,更多關(guān)于Java中間接口的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java連連看游戲菜單設(shè)計

    java連連看游戲菜單設(shè)計

    這篇文章主要為大家詳細介紹了java連連看游戲菜單部分的設(shè)計代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • springboot整合redisson實現(xiàn)延時隊列(附倉庫地址)

    springboot整合redisson實現(xiàn)延時隊列(附倉庫地址)

    延時隊列用于管理需要定時執(zhí)行的任務(wù),對于大數(shù)據(jù)量和高實時性需求,使用延時隊列比定時掃庫更高效,Redisson提供一種高效的延時隊列實現(xiàn)方式,本文就來詳細的介紹一下,感興趣都可以了解學習
    2024-10-10
  • Spring Boot集成/輸出/日志級別控制/持久化開發(fā)實踐

    Spring Boot集成/輸出/日志級別控制/持久化開發(fā)實踐

    SpringBoot默認集成Logback,支持靈活日志級別配置(INFO/DEBUG等),輸出包含時間戳、級別、類名等信息,并可通過Slf4j注解簡化日志記錄,實現(xiàn)控制臺與文件持久化存儲,本文給大家介紹Spring Boot集成/輸出/日志級別控制/持久化開發(fā)實踐,感興趣的朋友一起看看吧
    2025-08-08
  • Quarkus中ConfigSourceInterceptor的加密配置實現(xiàn)

    Quarkus中ConfigSourceInterceptor的加密配置實現(xiàn)

    這篇文章主要為大家介紹Quarkus中ConfigSourceInterceptor加密配置的實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • Java注冊郵箱激活驗證實現(xiàn)代碼

    Java注冊郵箱激活驗證實現(xiàn)代碼

    這篇文章主要介紹了Java注冊郵箱激活驗證實現(xiàn)代碼,有需要的朋友可以參考一下
    2013-12-12
  • Nacos日志與Raft的數(shù)據(jù)清理指南

    Nacos日志與Raft的數(shù)據(jù)清理指南

    隨著運行時間的增長,Nacos 的日志文件(logs/)和 Raft 持久化數(shù)據(jù)(data/protocol/raft/)可能會占用大量磁盤空間,影響系統(tǒng)穩(wěn)定性,本文詳細探討Nacos日志與Raft如何安全釋放磁盤空間,需要的朋友可以參考下
    2025-05-05
  • Java19新特性中結(jié)構(gòu)化并發(fā)的使用

    Java19新特性中結(jié)構(gòu)化并發(fā)的使用

    Java19在并發(fā)編程領(lǐng)域引入了一個全新的概念:結(jié)構(gòu)化并發(fā),這一特性旨在簡化并發(fā)任務(wù)的管理,提升多線程程序的可維護性和安全性,使其生命周期和控制流更加有序和明確,感興趣的可以了解一下
    2024-09-09
  • 詳解SpringMVC的攔截器鏈實現(xiàn)及攔截器鏈配置

    詳解SpringMVC的攔截器鏈實現(xiàn)及攔截器鏈配置

    攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下
    2022-08-08
  • Java讀取Properties配置文件的6種方式匯總

    Java讀取Properties配置文件的6種方式匯總

    這篇文章主要給大家介紹了關(guān)于Java讀取Properties配置文件的6種方式,java中的properties文件是一種配置文件,主要用于表達配置信息,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • MyBatis多數(shù)據(jù)源的兩種配置方式

    MyBatis多數(shù)據(jù)源的兩種配置方式

    這篇文章主要給大家介紹了關(guān)于MyBatis多數(shù)據(jù)源的兩種配置方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12

最新評論

沁水县| 香河县| 盖州市| 松潘县| 乡宁县| 枞阳县| 胶州市| 靖西县| 瑞丽市| 富民县| 佛坪县| 五峰| 正定县| 肇州县| 苏尼特左旗| 志丹县| 南木林县| 太原市| 成安县| 广西| 望谟县| 彭州市| 成都市| 石台县| 崇明县| 沿河| 贡嘎县| 大关县| 开封县| 汾西县| 禄丰县| 柳州市| 运城市| 华阴市| 临海市| 文安县| 瑞丽市| 沈丘县| 清原| 南雄市| 保定市|