在使用 interface 聲明一個接口時,只可以使用那個修飾符修飾該接口?


 

這是一個看似簡單其實挺有深意的題目,答案應該大多數人都知道是什么,不過原理和原因相比很少有人仔細研究過。對於本題,我有三點說明,希望看到這個評論的人能從這三點中看到你以前沒注意到的東西: 
①接口的聲明,修飾符的使用和類的聲明是一致的,(當前,前提類是外部類,不是所謂的內部類),都只能使用public或者什么都不寫,默認權限(這里的默認權限不是default,可以理解為friendly,但是java沒有這個關鍵字,但權限上可以理解為default),無論是private還是protected都是不可以的。 
②關於修飾符大小的說明:public>protected>默認>private,用一張表就是如下: 
 
③綜合①②,問題出現了,為什么protected的權限比默認權限要高,但是卻不能使用它修飾類或者接口呢?原因何在?本題評論如此之少,也沒有人深入揭示問題所在,都只是說什么由於需要被其他包其他類實現,所以就是public,那么對於默認修飾符的存在你們怎么解釋?我簡單說明一下:首先,這里對於接口聲明的默認修飾符,可不是像接口中的方法那樣,不寫修飾符就默認是public了,接口的聲明不寫修飾符就是default權限,只能同包的類可以訪問,其他包是不行的,不信試試看。其次雖然protected權限要比默認權限高,但是對於類或者接口的聲明卻不能使用,可以簡單這么理解:一個外部類或者接口,它的上一層結構是包,因此他們只有兩個作用域:同包,任意位置。除此之外的權限沒有任何意義,而基於此,public和默認權限就是足夠的了,不需要使用protected這種多余的權限造成更為復雜的類關系,因此java限制了類或接口的聲明,就僅限於public和默認。


免責聲明!

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



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