I have always found it ironic that Java’s default access scope (the one you get when you don’t specify either of private, protected or public) is actually the least useful (or least used).

Default access package has recently received a little bit more love when avid testers realized that it represents a good compromise between not opening your API to external users too much while making it easier for tests in the same package to access your protected state, but even so, default access scope in Java is pretty much never used.

Which is a shame, really, because this makes Java more verbose than it needs to be.

Or does it?

Is there really a scoping keyword that is prevalent compared to the other two?

If you could magically redesign this part in Java, which of private, protected or public would you make the default and why?