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