对于顶级类(外部类)来讲,只有两种修饰符:public和默认(default)。由于外部类的上一单元是包,因此外部类只有两个做用域:同包,任何位置。所以,只须要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。java
若是类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。mvc
上面这些都是平时使用司空见惯的,可是为何是这种状况呢?作用域
能够想一下,一个java项目是不可能在一个class里面完成的。mvc模式中,是把类分为三层,一层层调用类。若是定义为私有的和受保护的就没法调用。换句话说,对于一个java文件,要么就是本身单独运行,要么就是被其余程序做为库调用,若是一个java文件的类被private修饰,那么是否是其余的程序或是类是没法使用它的,那么他做为一个单独的文件就没啥用了。若是它做为单个文件运行,类加载怎么找到它呢,由于它对外不可见。同时,也失去了类的存在乎义。所以,类只有public和默认修饰符。class