介面裡的default,static方法

2022-04-29 05:42:06 字數 652 閱讀 9339

我們都知道介面裡的變數預設隱含型別是public static final,也是就是說是常量。而方法預設型別是public abstract,所以介面的方法都是抽象方法,但是事實真的是這樣嗎?

我的pc上安裝的是jdk1.8,一次編寫介面**的時候,看到介面裡的方法竟然可以定義為default型別,很好奇,就檢視了一下這個default關鍵字究竟有什麼含義,原來是jdk1.8的介面新特性,可以檢視下面的一篇文章:

(1)增加default方法。對已有的介面,如果想對介面增加乙個新方法,那麼需要對實現該介面的所有類進行修改,如果介面實的現類很多,就會帶來很大的工作量,而且還很容易破壞以前的**,帶來一些問題。如果把新的方法定義為default方法,就可以避免對其他實現類的修改。

但是,這樣也會有乙個問題:如果介面a和介面b裡有乙個名字相同並且引數列表也相同的方法都被定義為了default方法,那麼當類c實現介面a和介面b的時候就會在編譯時報錯。由於是編譯時報錯,這個完全可以接受,當類c成功實現了

介面a和介面b以後(沒有衝突),類c的例項就可以呼叫介面a和介面b裡的default方法了。

(2)新增了static函式。static修飾的方法也是非抽象方法,有自己的方法體,在介面中定義乙個靜態方法,該方法可以直接用< 介面名.方法名() >的形式來呼叫。相當於呼叫類的靜態方法一樣,給方法的呼叫帶來了方便。

c 裡的介面

1 介面作為型別而存在 介面是型別 class 一般行為的定義和契約。作用主要有 定義多個型別都需要的公共方法和屬性 作為一種不可例項化的型別存在。實現了介面的類或結構必須實現介面定義的每乙個屬性和方法,這些方法在設計或功能上往往是相關的。2 介面和抽象類 相同之處 兩者都不能產生例項物件,都可以作...

在C 裡怎麼重寫已實現的介面

本文通過虛函式來實現介面在繼承類裡的重寫。實現語言為c 通常如果我們定義了乙個介面如下 inte ce imyinte ce void foo int i 然後我們在類base裡實現了此介面,如下 class myclassbase protected void foo int i private ...

如何跳到系統設定裡的各種設定介面

定位服務設定介面 nsurl url nsurl urlwithstring prefs root location services 這樣就可以跳到系統設定的定位服務介面啦!我們繼續看幾個列子。facetime設定介面 nsurl url nsurl urlwithstring prefs roo...