Common practice doesn't mean a lot; most programmers never ever question the habits they got used to, while learning to program. As such, you mostly observe patterns teached a decade or so ago....but it's still standard practice to use private extensively in code today, as it does provide a lot of benefit...
A good example is setters and getters in Java.
Every Java tutorial you get is filled with them. As a result, you see everybody using these functions, even if they don't really add anything. If you do "public void setX(X newX) { this.x = newX; }" you can just as well drop the setter and getter, and just give access to the variable itself, since you're protecting nothing. There is one exception that I can think of, namely if you write a library where the public API accesses variables, and you want to be able to update the library without breaking the programs using it.
I know they're supposed to enhance modularity, but I have yet to see a case where you change the inner working of a class where the surrounding code isn't considered or touched. And it's easy enough to refactor abstraction/getter/setter functions in, if you need them.
So in most Java code, I don't see the need for getters and setters at all. Yet you continue to see these functions everywhere.
I do agree having protected/private is useful to guide intended use of the API (and I do miss the C++ protected notion in Java every now and then).
On the other hand, It's just guidance, something that can easily be expressed in a line of comment.