質問: 何故クラスには`protected`の修飾が出来ないのでしょうか。 例えば ``` public class ClassName{ //コンパイルエラーにならない } protected class ProtectedClass{ //コンパイルエラーになる } class PackagePrivateClass{ //ならない } private class PrivateClass{ //なる /*自分の理解ではリフレクション使わないとアクセス出来ないからダメ*/ } ``` protectedの場合、アクセスができるのになぜでしょうか。 ちなみに、インナークラスの事ではありません。
回答: Java Language Specification - 8.1.1. Class Modifiersより > > The access modifiers protected and private pertain only to member classes within a directly enclosing class declaration > > > とあるので、例に挙げられたようなトップレベルクラスではアクセス修飾子(Access Modifier)は`public`とデフォルトしか使えません。理由は、トップレベルクラスだと機能的に`protected`はデフォルトとまったく同じとなり、両方可能にしておくと紛らわしいからではないでしょうか。 インナークラスでは`public`、`protected`、`private`、デフォルトすべて指定可能です。