Java接口默認(rèn)方法帶來的問題分析【二義性問題】
本文實(shí)例分析了Java接口默認(rèn)方法帶來的問題。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
Java 8中,如果一個(gè)類實(shí)現(xiàn)兩個(gè)或多個(gè)接口,即“變相”的多繼承,但是若其中兩個(gè)接口都包含一個(gè)名字相同的default方法,會(huì)出現(xiàn)二義性問題。
二 實(shí)戰(zhàn)
1 代碼
interface faceA //定義接口faceA { void someMethod( ); default public void DefaultMethod( )//定義接口中默認(rèn)方法 { System.out.println("Default method in the interface A"); } } interface faceB //定義接口faceB { default public void DefaultMethod( )//定義接口InterfaceB中同名的默認(rèn)方法 { System.out.println("Default method in the interface B"); } } class DefaultMethodClass implements faceA,faceB //定義子類實(shí)現(xiàn)接口InterfaceA, InterfaceB { public void someMethod( ) //實(shí)現(xiàn)接口InterfaceA的抽象方法 { System.out.println("Some method in the subclass"); } } public class Interfacsamedefaults { public static void main(String[] args) { DefaultMethodClass def = new DefaultMethodClass( ); def.someMethod(); //調(diào)用抽象方法 def.DefaultMethod(); //調(diào)用默認(rèn)方法 } }
2 運(yùn)行
3 說明
實(shí)例化子類DefaultMethodClass的對(duì)象時(shí),編譯器不知道應(yīng)該在兩個(gè)同名的default方法中選擇哪一個(gè),因此產(chǎn)生了二義性。因此,一個(gè)類實(shí)現(xiàn)多個(gè)接口時(shí),若接口中有默認(rèn)方法,不能出現(xiàn)同名的方法。
Java之所以禁止多繼承,就是想避免類似的二義性。但是接口中允許實(shí)現(xiàn)默認(rèn)方法,又回到“二義性”的災(zāi)難之門。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SpringBoot啟動(dòng)流程入口參數(shù)創(chuàng)建對(duì)象源碼分析
這篇文章主要為大家介紹了SpringBoot啟動(dòng)流程入口參數(shù)研究及創(chuàng)建對(duì)象源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Spring Boot集成Thymeleaf模板引擎的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot集成Thymeleaf模板引擎的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02SpringBoot中的錯(cuò)誤處理機(jī)制源碼解析
這篇文章主要介紹了SpringBoot中的錯(cuò)誤處理機(jī)制源碼解析,springboot根據(jù)訪問者的request中的Accept屬性來判斷要返回什么樣的數(shù)據(jù),SpringBoot存在一個(gè)錯(cuò)誤處理機(jī)制,會(huì)根據(jù)不同請(qǐng)求返回不同的結(jié)果,需要的朋友可以參考下2023-12-12Java Spring 控制反轉(zhuǎn)(IOC)容器詳解
這篇文章主要為大家詳細(xì)介紹了Spring控制反轉(zhuǎn)IoC入門使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Java用Arrays.asList初始化ArrayList實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于Java中使用Arrays.asList初始化ArrayList的知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-10-10Java中將UUID存儲(chǔ)為Base64字符串的方法實(shí)現(xiàn)
使用Base64編碼來對(duì)UUID存儲(chǔ)在一些特定的場(chǎng)合被廣泛的使用,本文主要介紹了Java中將UUID存儲(chǔ)為Base64字符串的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Java和c語言隨機(jī)數(shù)Random代碼詳細(xì)
這篇文章主要介紹Java和c語言得隨機(jī)數(shù)Random,隨機(jī)數(shù)的用處在生活中比較少見,但是用處并不少,比如一些小游戲的制作等等。下面我們就一起來學(xué)習(xí)這篇關(guān)于Java和c隨機(jī)數(shù)Random得文章吧2021-10-10