JAVA8新特性:接口也可以寫實現方法


在日常開發中可能很多人對JAVA8的一些新特性不太關注:

有一個新特性看似不起眼,一旦用到了則會覺得非常的方便;

很多人都覺得接口接口里面只能寫抽象方法,不能寫實現方法;

實際上在JAVA8更新后,接口就可以添加默認方法和靜態方法:默認方法用default修飾符修飾,會被其他接口繼承;而靜態方法使用static修飾符修飾;

非常典型的就是java.util.Map,有興趣的可以去瞧一瞧;

為什么要有接口默認方法?

舉一個很現實的例子:

我們的接口老早就寫好了,后面因為各種業務問題,避免不了要修改接口。

在 Java 8 之前,比如要在一個接口中添加一個抽象方法,那所有的接口實現類都要去實現這個方法,不然就會編譯錯誤,而某些實現類根本就不需要實現這個方法也被迫要寫一個空實現,改動會非常大。

所以,接口默認方法就是為了解決這個問題,只要在一個接口添加了一個默認方法,所有的實現類就自動繼承,不需要改動任何實現類,也不會影響業務,爽歪歪。

另外,接口默認方法可以被接口實現類重寫。

為什么要有接口靜態方法?

接口靜態方法和默認方法類似,只是接口靜態方法不可以被接口實現類重寫。

接口靜態方法只可以直接通過靜態方法所在的 接口名.靜態方法名 來調用。

注意點

在接口多繼承的情況下,被繼承的接口如果存在相同的默認方法,是會引起編譯報錯的,如果在繼承接口類中不重寫此默認方法是會報錯的;

如果需要調用父類的方法可以通過 被繼承類的類名.super.默認方法名 的形式調用父類默認方法;

有一種情況下例外:就是多繼承的接口有相同的默認方法,也就是其中一個接口重寫了父類的默認方法,這種情況下不需要重寫默認方法;

默認方法與接口抽象方法定義相同:默認方法會優先於接口抽象方法,接口定義的方法會被忽略;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM