there are 4 categories of nested classes,defined by the context these nested types are declared in
1). static member classes
2). non-static member classes
3). local classes
4). anonymous classes
out of which only static member classes and non-static member classes can have all types of accessibility modifiers i.e public private protected and default/package accessibility.
And local classes as well as anonymous classes can not use any of the access modifiers,and the top level class under which these nested types are declared can have public or default accessibility, a class an also have abstract, and final as access modifiers.
If a top level class is declared as private the compiler will complain that the "modifier private is not allowed here". This means that a top level class can not be private. Same is the case with protected.
a short example here shows the overview of type declarations: