對於頂級類(外部類)來講,只有兩種修飾符:public和默認(default)。由於外部類的上一單元是包,因此外部類只有兩個做用域:同包,任何位置。所以,只須要兩種控制權限:包控制權限和公開訪問權限,也就對應兩種控制修飾符:public和默認(default)。java
若是類使用了private修飾符,說明是個內部類。內部類的上一級是外部類,那麼對應的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。當一個內部類使用了private修飾後,只能在該類的外部類內部使用。mvc
上面這些都是平時使用司空見慣的,可是爲何是這種狀況呢?作用域
能夠想一下,一個java項目是不可能在一個class裏面完成的。mvc模式中,是把類分爲三層,一層層調用類。若是定義爲私有的和受保護的就沒法調用。換句話說,對於一個java文件,要麼就是本身單獨運行,要麼就是被其餘程序做爲庫調用,若是一個java文件的類被private修飾,那麼是否是其餘的程序或是類是沒法使用它的,那麼他做爲一個單獨的文件就沒啥用了。若是它做爲單個文件運行,類加載怎麼找到它呢,由於它對外不可見。同時,也失去了類的存在乎義。所以,類只有public和默認修飾符。class