欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

default怎么修飾接口中的方法詳解

 更新時(shí)間:2021年05月26日 14:30:38   作者:遠(yuǎn)赴山河萬(wàn)里  
今天給各位小伙伴們總結(jié)一下default怎么修飾接口中的方法,文中有非常詳細(xì)的圖文解說(shuō).對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下

一、default修飾接口中的方法

在實(shí)現(xiàn)HandlerInterceptor接口時(shí),我發(fā)現(xiàn)不實(shí)現(xiàn)HandlerInterceptor接口的方法也不會(huì)報(bào)錯(cuò)

在這里插入圖片描述

仔細(xì)想來(lái),還是我對(duì)接口的理解不清晰。

打開(kāi)源碼發(fā)現(xiàn)HandlerInterceptor接口中的方法都是default

在這里插入圖片描述

在以前的接口編寫(xiě)中,我總是省略權(quán)限修飾符,因?yàn)樵诮涌谥械?strong>方法中默認(rèn)是public abstract

那么再來(lái)對(duì)接口進(jìn)行總結(jié)。

在這里插入圖片描述

那么也就是說(shuō),實(shí)現(xiàn)類(lèi)要覆蓋接口中的抽象方法就能實(shí)例化,而HandlerInterceptor接口中的方法都是default

在JDK8增加的default修飾接口方法時(shí),有什么作用呢?

實(shí)現(xiàn)類(lèi)會(huì)繼承接口中的default方法

還有兩個(gè)要注意的點(diǎn)

一言以蔽之,更接近實(shí)現(xiàn)類(lèi)的優(yōu)先級(jí)更高,如: 實(shí)現(xiàn)類(lèi) > 抽象類(lèi) > 接口

1. 如果一個(gè)類(lèi)同時(shí)實(shí)現(xiàn)接口A和B,接口A和B中有相同的default方法,這時(shí),該類(lèi)必須重寫(xiě)接口中的default方法

2. 如果子類(lèi)繼承父類(lèi),父類(lèi)中有b方法,該子類(lèi)同時(shí)實(shí)現(xiàn)的接口中也有b方法(被default修飾),那么子類(lèi)會(huì)繼承父類(lèi)的b方法而不是繼承接口中的b方法

二、Java中的“多繼承“?

在學(xué)習(xí)C++時(shí),多繼承會(huì)帶來(lái)非常著名的菱形繼承問(wèn)題

那么為什么Java接口為何能多繼承?

1.Java接口是行為性的,也就是說(shuō)接口只是定義某個(gè)行為的名稱
2.具體的實(shí)現(xiàn)動(dòng)作,都在實(shí)現(xiàn)類(lèi)本身這里。

從JDK8開(kāi)始,接口中可以寫(xiě)default方法了。這其實(shí)是java自己就給自己出了一個(gè)問(wèn)題。

接口可以書(shū)寫(xiě)默認(rèn)方法了,然后又因?yàn)?strong>接口之間是可以多繼承的,因而實(shí)質(zhì)上Java 8的接口多繼承其實(shí)也會(huì)涉及到實(shí)現(xiàn)多繼承的問(wèn)題。

解決接口default方法沖突的三步驟:

  • 方法簽名相同時(shí),才表示出現(xiàn)了沖突。
  • 類(lèi)中的方法優(yōu)先級(jí)最高。類(lèi)或者父類(lèi)中的方法實(shí)現(xiàn)優(yōu)先級(jí)大于任何接口的默認(rèn)方法
  • 其實(shí),子接口的默認(rèn)方法優(yōu)先級(jí)更高。
  • 若最終還是無(wú)法判斷,那么實(shí)現(xiàn)類(lèi)必須通過(guò)顯示復(fù)寫(xiě)的方式復(fù)寫(xiě)默認(rèn)方法,然后再自己通過(guò)xxx.super.xxx()的方式來(lái)指定具體使用哪個(gè)接口的實(shí)現(xiàn)

總之,Java8在語(yǔ)言層面上,對(duì)若出現(xiàn)接口default方法沖突的解決方案是:不作為。其實(shí)不作為也是一種作為,它讓編譯器去提示調(diào)用者必須顯示的override這個(gè)沖突的方法,讓coder自己去決定調(diào)用邏輯

三、關(guān)于抽象類(lèi)與接口的思考

如果現(xiàn)在問(wèn)我接口和抽象類(lèi)有什么區(qū)別,我會(huì)覺(jué)得去說(shuō)兩者之間具體的使用細(xì)節(jié)是舍本逐末了,應(yīng)該從設(shè)計(jì)理念出發(fā)。

于是引出我對(duì)此的理解

抽象類(lèi):抽象體,對(duì)于個(gè)體(事物)的抽象。

接口:抽象面,對(duì)于事物某一特性(行為)的抽象。接口只是定義某個(gè)行為的名稱。

在Java的設(shè)計(jì)中,經(jīng)??梢钥吹絻烧呓M合起來(lái)使用。如Servlet

什么叫Servlet?實(shí)現(xiàn)了Servlet接口的類(lèi)就是一個(gè)Servlet。

在這里插入圖片描述

可以發(fā)現(xiàn),抽象類(lèi)GenericServlet實(shí)現(xiàn)了Servlet接口。

接口的好處是什么?

規(guī)范。

抽象類(lèi)的好處是什么?

捕捉子類(lèi)的通用特性,減少冗余代碼,同時(shí)起到規(guī)范的作用。

這樣兩者結(jié)合起來(lái)的好處是什么(GenericServlet)?

規(guī)范,同時(shí)減少了編程人員的所需要編寫(xiě)的代碼,抽象類(lèi)給出模板。

到此這篇關(guān)于default怎么修飾接口中的方法詳解的文章就介紹到這了,更多相關(guān)default修飾方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javaweb實(shí)戰(zhàn)之商城項(xiàng)目開(kāi)發(fā)(三)

    javaweb實(shí)戰(zhàn)之商城項(xiàng)目開(kāi)發(fā)(三)

    這篇文章主要針對(duì)javaweb商城項(xiàng)目開(kāi)發(fā)進(jìn)行實(shí)戰(zhàn)演習(xí),主要實(shí)現(xiàn)通用的BaseDao.java和使用resultMap映射關(guān)聯(lián)對(duì)象,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Spring配置文件中parent與abstract的使用

    Spring配置文件中parent與abstract的使用

    這篇文章主要介紹了Spring配置文件中parent與abstract的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 四種Springboot常見(jiàn)全局時(shí)間格式化方式

    四種Springboot常見(jiàn)全局時(shí)間格式化方式

    這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)全局時(shí)間格式化的四種常見(jiàn)方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • IDEA2022 提示更新 TKK失敗請(qǐng)檢查網(wǎng)絡(luò)連接的問(wèn)題

    IDEA2022 提示更新 TKK失敗請(qǐng)檢查網(wǎng)絡(luò)連接的問(wèn)題

    這篇文章主要介紹了IDEA2022 提示:更新 TKK 失敗,請(qǐng)檢查網(wǎng)絡(luò)連接,本文給大家分享解決方案,對(duì)idea2022提示更新TKK失敗感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    這篇文章主要介紹了Java I/O深入學(xué)習(xí)之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對(duì)于一門(mén)程序語(yǔ)言來(lái)說(shuō),創(chuàng)建一個(gè)好的輸入/輸出系統(tǒng)并非易事。在充分理解Java I/O系統(tǒng)以便正確地運(yùn)用之前,我們需要學(xué)習(xí)相當(dāng)數(shù)量的類(lèi)。,需要的朋友可以參考下
    2019-06-06
  • java導(dǎo)出生成csv文件的方法

    java導(dǎo)出生成csv文件的方法

    這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出生成csv文件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java 函數(shù)編程詳細(xì)介紹

    Java 函數(shù)編程詳細(xì)介紹

    這篇文章主要介紹了Java函數(shù)式編程,lambda表達(dá)式可以被認(rèn)為是一個(gè)匿名函數(shù),可以在函數(shù)接口的上下文中使用。函數(shù)接口是只指定一個(gè)抽象方法的接口,下面來(lái)看文章的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-11-11
  • Java深入講解AWT實(shí)現(xiàn)事件處理流程

    Java深入講解AWT實(shí)現(xiàn)事件處理流程

    AWT的事件處理是一種委派式事件處理方式:普通組件(事件源)將整個(gè)事件處理委托給特定的對(duì)象(事件監(jiān)聽(tīng)器);當(dāng)該事件源發(fā)生指定的事件時(shí),就通知所委托的事件監(jiān)聽(tīng)器,由事件監(jiān)聽(tīng)器來(lái)處理這個(gè)事件
    2022-04-04
  • Linux 下通過(guò) java 命令啟動(dòng) jar 包常見(jiàn)方式小結(jié)

    Linux 下通過(guò) java 命令啟動(dòng) jar 包常見(jiàn)方式小結(jié)

    這篇文章主要介紹了Linux 下通過(guò) java 命令啟動(dòng) jar 包常見(jiàn)方式小結(jié),后臺(tái)啟動(dòng)jar包命令大致有五種,每種方式結(jié)合代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-12-12
  • SpringBoot集成cache緩存的實(shí)現(xiàn)

    SpringBoot集成cache緩存的實(shí)現(xiàn)

    日常開(kāi)發(fā)中,緩存是解決數(shù)據(jù)庫(kù)壓力的一種方案,本文記錄springboot中使用cache緩存。需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評(píng)論