protectedのclassが何故実装できないのか


何故クラスには`protected`の修飾が出来ないのでしょうか。  
例えば

[code]

    public class ClassName{
      //コンパイルエラーにならない
    }
    protected class ProtectedClass{
      //コンパイルエラーになる
    }
    class PackagePrivateClass{
      //ならない
    }
    private class PrivateClass{
      //なる
      /*自分の理解ではリフレクション使わないとアクセス出来ないからダメ*/
    }
    
[/code]

protectedの場合、アクセスができるのになぜでしょうか。  
ちなみに、インナークラスの事ではありません。




[Java Language Specification - 8.1.1. Class
Modifiers](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1)より

> The access modifiers protected and private pertain only to member classes
> within a directly enclosing class declaration

とあるので、例に挙げられたようなトップレベルクラスではアクセス修飾子（Access
Modifier）は`public`とデフォルトしか使えません。理由は、トップレベルクラスだと機能的に`protected`はデフォルトとまったく同じとなり、両方可能にしておくと紛らわしいからではないでしょうか。  
インナークラスでは`public`、`protected`、`private`、デフォルトすべて指定可能です。




[Java Language Specification - 8.1.1. Class
Modifiers](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1)より

> The access modifiers protected and private pertain only to member classes
> within a directly enclosing class declaration

とあるので、例に挙げられたようなトップレベルクラスではアクセス修飾子（Access
Modifier）は`public`とデフォルトしか使えません。理由は、トップレベルクラスだと機能的に`protected`はデフォルトとまったく同じとなり、両方可能にしておくと紛らわしいからではないでしょうか。  
インナークラスでは`public`、`protected`、`private`、デフォルトすべて指定可能です。

