26790


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

[code]

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

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


CC BY-SA 3.0
2016-06-16T10:56:43.010
26788
2016-06-16T14:30:19.537
2016-06-16T12:05:35.540
15185
15185
question
java
protectedのclassが何故実装できないのか


[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`、デフォルトすべて指定可能です。


CC BY-SA 3.0
2016-06-16T11:15:41.420
26790
2016-06-16T14:30:19.537
2016-06-16T14:30:19.537
3974
3974
26788
answer