Java does follow its design principles on itself. What happens when you try to reduce/narrow the scope of public method in a subclass ? one gets an error.
Java scope modifiers levels follow : private < (default) < protected < public
All class in package are supposed to be friendly because they work together. To make a member available in package it is defined in default scope.
A subclass may reside outside the package, following scope levels again : private < (default) < protected < public - We can not narrow down the scope. Protected is broader scope than default so Java does not contradicts its own guidelines. Thus, a protected member will be available in default scope. Also : class < package < Project.
Please do not limit modifiers to only visibility, but inheritance, structure are also in work at same time and add them to picture as well. If this was true : private < protected < (default) < public. then all sub classes would have to reside in same package, then why you need to inherit you can access everything as default scope is there at applicable at package level. Default scope would have lost its value and so does inheritance.