Java的外部類為什么不能使用private和protected進(jìn)行修飾的講解
Java的外部類為什么不能使用private和protected進(jìn)行修飾
對于這個(gè)問題,一直沒有仔細(xì)思考,今天整理一下:
對于頂級類(外部類)來說,只有兩種修飾符:public
和默認(rèn)(default
)。因?yàn)橥獠款惖纳弦粏卧前酝獠款愔挥袃蓚€(gè)作用域:同包,任何位置。因此,只需要兩種控制權(quán)限:包控制權(quán)限和公開訪問權(quán)限,也就對應(yīng)兩種控制修飾符:public和默認(rèn)(default)。
如果類使用了private
修飾符,說明是個(gè)內(nèi)部類。內(nèi)部類的上一級是外部類,那么對應(yīng)的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當(dāng)一個(gè)內(nèi)部類使用了private修飾后,只能在該類的外部類內(nèi)部使用。
上面這些都是平時(shí)使用司空見慣的,但是為什么是這種情況呢?
可以想一下,一個(gè)java項(xiàng)目是不可能在一個(gè)class里面完成的。mvc模式中,是把類分為三層,一層層調(diào)用類。如果定義為私有的和受保護(hù)的就無法調(diào)用。換句話說,對于一個(gè)java文件,要么就是自己單獨(dú)運(yùn)行,要么就是被其他程序作為庫調(diào)用,如果一個(gè)java文件的類被private修飾,那么是不是其他的程序或是類是無法使用它的,那么他作為一個(gè)單獨(dú)的文件就沒啥用了。如果它作為單個(gè)文件運(yùn)行,類加載怎么找到它呢,因?yàn)樗鼘ν獠豢梢?。同時(shí),也失去了類的存在意義。因此,類只有public和默認(rèn)修飾符。
小結(jié)
1.類指外部類,最大的類,修飾符有public(表示該類在項(xiàng)目所有類中可以被導(dǎo)入),default(該類只能在同一個(gè)package中使用),abstract
,final
2.內(nèi)部類指位于類內(nèi)部但不包括位于塊、構(gòu)造器、方法內(nèi),且有名稱的類,修飾符有public
,private
,protected
訪問控制符,也可以用static
,final
關(guān)鍵字修飾,public和private比較簡單,一個(gè)表示所有可以被所有類訪問,一個(gè)表示只能被自身訪問,protected修飾的成員類可以被同一個(gè)包中的類和子類訪問。而default
修飾的成員類只能被同一個(gè)包中的類訪問。
3.局部內(nèi)部類指位于塊、構(gòu)造器、方法內(nèi)的有名稱類,最多只能有final
修飾
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Springcloud-nacos實(shí)現(xiàn)配置和注冊中心的方法
這篇文章主要介紹了Springcloud-nacos實(shí)現(xiàn)配置和注冊中心的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07JavaWeb項(xiàng)目Servlet無法訪問問題解決
這篇文章主要介紹了JavaWeb項(xiàng)目Servlet無法訪問問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring?Data?Jpa返回自定義對象的3種方法實(shí)例
在使用Spring Data Jpa框架時(shí),根據(jù)業(yè)務(wù)需求我們通常需要進(jìn)行復(fù)雜的數(shù)據(jù)庫查詢,下面這篇文章主要給大家介紹了關(guān)于Spring?Data?Jpa返回自定義對象的3種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08mybatis if test 不為空字符串或null的解決
這篇文章主要介紹了mybatis if test 不為空字符串或null的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Java16新特性record類使用細(xì)節(jié)示例詳解
這篇文章主要為大家介紹了Java16新特性record類使用細(xì)節(jié)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09