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