成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 中的接口還可以這樣用,你知道嗎?

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

Java? 程序員都知道要面向接口編程,那 Java? 中的接口除了定義接口方法之外還能怎么用你知道嗎?今天阿粉就來帶大家看一下 Java 中的接口還可以有哪些用法。

基本特性

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

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

如下所示,我們定義一個(gè)接口;

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();

}

默認(rèn)方法

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

public interface ITest extends Serializable, RandomAccess {

public abstract String sayHello();
String sayHello2();


default String sayHello3() {
return "hello3";
}

}

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

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

標(biāo)記

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

圖片

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

圖片

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

靜態(tài)方法

跟默認(rèn)方法一樣,JDK 8 還支持在接口中增加靜態(tài)方法,雖然說在接口中定義靜態(tài)方法的做法不常見,但是當(dāng)需要使用的時(shí)候也是可以支持的,避免在創(chuàng)建一個(gè)單獨(dú)的工具類,跟在類中定義的靜態(tài)方法一樣,我們可以直接通過接口名稱引用靜態(tài)方法,當(dāng)然靜態(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";
}
}

私有方法

大家有沒有注意到,上面不管是默認(rèn)方法還是靜態(tài)方法其實(shí)都是 public? 公開的,可以讓實(shí)現(xiàn)類或者其他類直接使用,那有沒有可能在接口中定義一個(gè)私有方法呢?在 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? 就不行了,是無法編譯通過的,會(huì)提示不允許使用 private 修飾符。

圖片

總結(jié)

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

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2022-04-11 08:20:36

編程輔助工具GitHubCopilot

2020-07-09 08:37:13

ES6

2024-01-09 07:29:05

Argo代碼庫應(yīng)用程序

2021-02-01 13:35:28

微信Python技巧

2024-06-13 08:19:08

Controller接口參數(shù)

2024-06-03 14:27:08

ThisAPIThat

2012-10-12 10:13:26

eclips代碼編寫Editplus

2019-01-07 13:01:08

Linux驚嘆用法命令

2023-12-12 08:41:01

2024-09-18 07:00:00

消息隊(duì)列中間件消息隊(duì)列

2022-09-29 15:32:58

云計(jì)算計(jì)算模式

2021-10-14 06:52:47

算法校驗(yàn)碼結(jié)構(gòu)

2024-03-18 08:56:12

ReactVuejQuery

2025-01-23 00:00:00

Java布隆過濾器

2023-12-11 12:04:50

Linuxsystemd工具

2020-08-24 07:19:13

主鍵自增數(shù)據(jù)庫

2024-05-28 09:12:10

2024-04-07 00:00:00

ESlint命令變量

2019-12-12 09:23:29

Hello World操作系統(tǒng)函數(shù)庫

2022-03-10 08:25:27

JavaScrip變量作用域
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 男女又爽又黄视频 | 欧美日韩中文在线 | 99精品国产成人一区二区 | 国产成人精品久久久 | 色噜噜色综合 | 久久精品国产一区二区电影 | 日韩欧美三级电影在线观看 | 午夜在线视频 | 欧美日韩视频在线 | yeyeav | 欧美日韩亚洲视频 | 国产精品国产精品国产专区不蜜 | 国产一区二区精品在线 | 欧美一级黄色免费 | 国产成人精品午夜 | 国产午夜一级 | 日中文字幕在线 | 日本精品一区二区三区在线观看视频 | 欧美精品久久 | 欧美黄色大片在线观看 | 国产日韩精品视频 | 精品久久久久久亚洲综合网站 | 亚洲国产精品99久久久久久久久 | 国产精品久久久爽爽爽麻豆色哟哟 | 精品一区二区久久久久久久网站 | 国产色爽 | 91精品国产自产在线老师啪 | 特级特黄特色的免费大片 | 男女啪啪高潮无遮挡免费动态 | 日本免费视频在线观看 | 国产欧美一区二区三区在线看蜜臀 | 在线视频日韩 | 中文字幕国产 | 国产精品欧美一区二区 | 亚洲人成在线播放 | 国产精品入口久久 | 成人在线免费观看视频 | 成人在线播放网站 | 久久国产精品久久 | 欧美激情亚洲激情 | 日韩成人在线播放 |