Java的外部類,爲什麼只能使用public和default進行修飾

對於這個問題,一直沒有仔細思考

對於頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。因爲外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。因此,只需要兩種控制權限:包控制權限和公開訪問權限,也就對應兩種控制修飾符:public和默認(default)。可以滿足所有的情況了。

如果類使用了private修飾符,說明是個內部類。內部類的上一級是外部類,那麼對應的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當一個內部類使用了private修飾後,只能在該類的外部類內部使用。

上面這些都是平時使用司空見慣的,但是爲什麼是這種情況呢?

可以想一下,一個java項目是不可能在一個class裏面完成的。mvc模式中,是把類分爲三層,一層層調用類。如果定義爲私有的和受保護的就無法調用。換句話說,對於一個java文件,要麼就是自己單獨運行,要麼就是被其他程序作爲庫調用,如果一個java文件的類被private修飾,那麼是不是其他的程序或是類是無法使用它的,那麼他作爲一個單獨的文件就沒啥用了。如果它作爲單個文件運行,類加載怎麼找到它呢,因爲它對外不可見。同時,也失去了類的存在意義。

因此,類只有public和默認修飾符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章