大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

更新時(shí)間:2020-06-04 16:28:02 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2465次

接口的變化

在Java8之前,Java中,實(shí)現(xiàn)接口的類必須為接口中定義的每個(gè)方法提供一個(gè)實(shí)現(xiàn),或者從父類中繼承它的實(shí)現(xiàn)。

但是,一旦類庫的設(shè)計(jì)者需要更新接口,向其中加入新的方法,這種方式就會(huì)出現(xiàn)問題。

現(xiàn)實(shí)情況是,現(xiàn)存的實(shí)體類往往不在接口設(shè)計(jì)者的控制范圍之內(nèi),這些實(shí)體類為了適配新的接口約定也需要進(jìn)行修改。

由于Java 8的API在現(xiàn)存的接口上引入了非常多的新方法,這種變化帶來的問題也愈加嚴(yán)重。

Java 8為了解決這一問題引入了一種新的機(jī)制。

Java 8中的接口現(xiàn)在支持在聲明方法的同時(shí)提供實(shí)現(xiàn),這聽起來讓人驚訝!通過兩種方式可以完成這種操作。

其一,Java 8允許在接口內(nèi)聲明靜態(tài)方法。

其二,Java 8引入了一個(gè)新功能,叫默認(rèn)方法。

接口的默認(rèn)方法

通過默認(rèn)方法你可以指定接口方法的默認(rèn)實(shí)現(xiàn)。因此,實(shí)現(xiàn)接口的類如果不實(shí)現(xiàn)該方法,就會(huì)自動(dòng)繼承默認(rèn)的實(shí)現(xiàn)。這種機(jī)制可以使你平滑地進(jìn)行接口的優(yōu)化和演進(jìn)。

那么,我們?cè)撊绾伪孀R(shí)哪些是默認(rèn)方法呢?非常簡(jiǎn)單。默認(rèn)方法由default修飾符修飾,并像類中聲明的其他方法一樣包含方法體。

Java 8中,大量的默認(rèn)方法已經(jīng)被添加到核心的JDK接口中了.

示例:

Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

Defaulable接口用關(guān)鍵字default聲明了一個(gè)默認(rèn)方法notRequired()。

Defaulable接口的實(shí)現(xiàn)者之一DefaultableImpl實(shí)現(xiàn)了這個(gè)接口,并且讓默認(rèn)方法保持原樣。

Defaulable接口的另一個(gè)實(shí)現(xiàn)者OverridableImpl用自己的方法覆蓋了默認(rèn)方法。

注意:接口不能提供對(duì)Object類的任何方法的默認(rèn)實(shí)現(xiàn)。特別是,這意味著從接口里不能提供對(duì)equals,hashCode或toString的默認(rèn)實(shí)現(xiàn)。

接口的靜態(tài)方法

Java 8帶來的另一個(gè)有趣的特性是接口可以聲明并且可以提供實(shí)現(xiàn)靜態(tài)方法。例如:

private interface DefaulableFactory{

在JVM中,默認(rèn)方法的實(shí)現(xiàn)是非常高效的,并且通過字節(jié)碼指令為方法調(diào)用提供了支持。

默認(rèn)方法允許繼續(xù)使用現(xiàn)有的Java接口,而同時(shí)能夠保障正常的編譯過程。

這方面好的例子是大量的方法被添加到j(luò)ava.util.Collection接口中去:stream(),parallelStream(),forEach(),removeIf(),……

解決沖突的規(guī)則

我們知道Java語言中一個(gè)類只能繼承一個(gè)父類,但是一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

隨著默認(rèn)方法在Java 8中引入,有可能出現(xiàn)一個(gè)類繼承了多個(gè)方法而它們使用的卻是同樣的函數(shù)簽名。

這種情況下,類會(huì)選擇使用哪一個(gè)函數(shù)?在實(shí)際情況中,像這樣的沖突可能極少發(fā)生,但是一旦發(fā)生這樣的狀況,必須要有一套規(guī)則來確定按照什么樣的約定處理這些沖突。

假設(shè)有以下幾個(gè)接口:

Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

解決問題的三條規(guī)則

如果一個(gè)類使用相同的函數(shù)簽名從多個(gè)地方(比如另一個(gè)類或接口)繼承了方法,通過三條規(guī)則可以進(jìn)行判斷。

(1)類中的方法優(yōu)先級(jí)最高。類或父類中聲明的方法的優(yōu)先級(jí)高于任何聲明為默認(rèn)方法的優(yōu)先級(jí)。

(2)如果無法依據(jù)第一條進(jìn)行判斷,那么子接口的優(yōu)先級(jí)更高:函數(shù)簽名相同時(shí),優(yōu)先選擇擁有最具體實(shí)現(xiàn)的默認(rèn)方法的接口,即如果B繼承了A,那么B就比A更加具體。

(3)最后,如果還是無法判斷,繼承了多個(gè)接口的類必須通過顯式覆蓋和調(diào)用期望的方法。否則將不能編譯通過。

依據(jù)此規(guī)則,上面的示例將會(huì)使用B接口中的方法。

沖突及如何顯式地消除歧義

前面的例子能夠應(yīng)用前兩條判斷規(guī)則解決。讓我們更進(jìn)一步,假設(shè)B不再繼承A呢?

Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

這時(shí)規(guī)則(2)就無法進(jìn)行判斷了,因?yàn)閺木幾g器的角度看沒有哪一個(gè)接口的實(shí)現(xiàn)更加具體,兩個(gè)都差不多。A接口和B接口的hello方法都是有效的選項(xiàng)。所以,Java編譯器這時(shí)就會(huì)拋出一個(gè)編譯錯(cuò)誤,因?yàn)樗鼰o法判斷哪一個(gè)方法更合適。

沖突的解決

解決這種兩個(gè)可能的有效方法之間的沖突,沒有太多方案;你只能顯式地決定你希望在C中使用哪一個(gè)方法。

為了達(dá)到這個(gè)目的,你可以覆蓋類C中的hello方法,在它的方法體內(nèi)顯式地調(diào)用你希望調(diào)用的方法。

Java 8中引入了一種新的語法X.super.m(...),其中X是你希望調(diào)用的m方法所在的父接口。

舉例來說,如果你希望C使用來自于B的默認(rèn)方法,它的調(diào)用方式看起來就如下所示:

public class C implements B,A{
void hello(){
B.super.hello();
}
}

顯式地選擇調(diào)用接口B中的方法

盡管默認(rèn)方法非常強(qiáng)大,但是在使用默認(rèn)方法時(shí)我們需要小心注意一個(gè)地方:在聲明一個(gè)默認(rèn)方法前,請(qǐng)仔細(xì)思考是不是真的有必要使用默認(rèn)方法,因?yàn)槟J(rèn)方法會(huì)帶給程序歧義,并且在復(fù)雜的繼承體系中容易產(chǎn)生編譯錯(cuò)誤。

Java8有什么新特性,讓我們學(xué)學(xué)接口的變化

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java8有什么新特性,讓我們學(xué)學(xué)接口的變化”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 中文字幕日本在线观看 | 久久综合综合久久狠狠狠97色 | 国产福利一区二区三区在线视频 | 婷婷性| 国产精品国语自产拍在线观看 | 99在线免费播放 | 天堂成人一区二区三区 | 日本在线中文 | 国产精品视频第一区二区 | 嫩草影院麻豆久久视频 | 中文字幕在线亚洲 | 亚洲欧美日韩高清在线看 | 国产日韩美国成人 | 亚洲一区二区三区网站 | 国产日韩精品一区二区在线观看 | 午夜视频18 | 欧美成人性生活视频 | jizzz亚洲美女 | 免费一级片视频 | 日本一级特黄视频 | 久久一区二区精品综合 | 日韩在线观看中文字幕 | 性影院| 国产免费福利 | 91久久综合 | 久久精品国产99国产精品澳门 | 国产福利在线观看第二区 | 成人ab片 | 嘿咻成人免费视频欧美激情 | 免费高清成人啪啪网站 | 未成人做爰视频www 我爱52avαv永久网站 | 国产精品一区在线麻豆 | 欧洲免费在线视频 | 牛牛影视在线观看片免费 | 日韩中文字幕精品 | 四虎永久在线精品影院 | 丁香狠狠色婷婷久久综合 | 一一级毛片 | 青青草99热这里都是精品 | 日产国产欧美视频一区精品 | 看全大色黄大色黄大片一级爽 |