A default constructor provided by the compiler has public access if the class itself is public, or default access otherwise.
Not quite true.
JLS 2e 8.8.7 states:
If the class is declared public, then the default constructor is implicitly given the access modifier public (�6.6); if the class is declared protected, then the default constructor is implicitly given the access modifier protected (�6.6); if the class is declared private, then the default constructor is implicitly given the access modifier private (�6.6); otherwise, the default constructor has the default access implied by no access modifier.