關(guān)于Java中的頂層類修飾問題
Java 頂層類修飾問題
對于這個問題,一直沒有仔細(xì)思考
今天整理一下
對于頂級類(外部類)來說,只有兩種修飾符:public和默認(rèn)(default)。因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。因此,只需要兩種控制權(quán)限:包控制權(quán)限和公開訪問權(quán)限,也就對應(yīng)兩種控制修飾符:public和默認(rèn)(default)。
如果類使用了private修飾符,說明是個內(nèi)部類。內(nèi)部類的上一級是外部類,那么對應(yīng)的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當(dāng)一個內(nèi)部類使用了private修飾后,只能在該類的外部類內(nèi)部使用。
上面這些都是平時使用司空見慣的
但是為什么是這種情況呢?
可以想一下,一個java項目是不可能在一個class里面完成的。mvc模式中,是把類分為三層,一層層調(diào)用類。如果定義為私有的和受保護的就無法調(diào)用。
換句話說,對于一個java文件,要么就是自己單獨運行,要么就是被其他程序作為庫調(diào)用,如果一個java文件的類被private修飾,那么是不是其他的程序或是類是無法使用它的,那么他作為一個單獨的文件就沒啥用了。
如果它作為單個文件運行,類加載怎么找到它呢,因為它對外不可見。同時,也失去了類的存在意義。因此,類只有public和默認(rèn)修飾符。
private不能用于修飾頂層類
原因
對于頂層類(外部類)來說,只有兩種修飾符:public和默認(rèn)(default)。
因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。
因此,只需要兩種控制權(quán)限:包控制權(quán)限和公開訪問權(quán)限,
也就對應(yīng)兩種控制修飾符:public和默認(rèn)(default)。
但是private可以修飾class的,只不過該類不能使頂層類,
可以是內(nèi)部類 內(nèi)部類的上一級是外部類,那么對應(yīng)的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。
當(dāng)一個內(nèi)部類使用了private修飾后,只能在該類的外部類內(nèi)部使用
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring MVC深入學(xué)習(xí)之啟動初始化過程
最近因為工作的原因在學(xué)習(xí)Spring MVC,為了更深入的學(xué)習(xí)Spring MVC,下面這篇文章主要給大家介紹了關(guān)于Spring MVC深入學(xué)習(xí)之啟動初始化過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07簡單講解在Java編程中實現(xiàn)設(shè)計模式中的單例模式結(jié)構(gòu)
這篇文章主要介紹了簡單講解在Java編程中實現(xiàn)設(shè)計模式中的單例模式結(jié)構(gòu),設(shè)計模式是最基本直白簡單的一種設(shè)計模式,需要的朋友可以參考下2016-04-04Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過程)
Apache?開源項目?Log4j?的遠(yuǎn)程代碼執(zhí)行漏洞細(xì)節(jié)被公開,由于?Log4j?的廣泛使用,該漏洞一旦被攻擊者利用會造成嚴(yán)重危害,下面小編給大家?guī)砹薒og4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載,感興趣的朋友一起看看吧2021-12-12springboot多項目結(jié)構(gòu)實現(xiàn)
本文主要介紹了springboot多項目結(jié)構(gòu)實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01解決idea中svn提交時performing vcs refresh時間很長的問題
這篇文章主要介紹了解決idea中svn提交時performing vcs refresh時間很長的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09