Let's start with another behavior: even if you declare a method/variable as private, another instance of the same class can access it. That's OK I can live with it. I call these class-private and not instance-private.
Now the question part:
For example, at runtime I want to be able to check that all String variables in
this class are not null, and if they are null they should be changed to the string "NULL".
I can run through the variables using reflection and get their values. But if I extend my class and add private or even protected variables my base class can't access them. I have to
setAccessible on the variables before I can use them.
So please explain to me why the base-class (super-class) can't access private/protected variables from its sub-class. It is its sub-class, so I don't get it. What's the idea behind this?
I know that the super-class should not know about its sub-classes, but in my example it makes sense, no?
Is it because I can't or shouldn't restrict my sub-classes in this way?
Based on the answers, I want to know also: Why isn't accessing another instance's private variables from the same class considered a violation of encapsulation?