I think it's important to remember that a protected member variable is accessible to any subclasses of the class in which it is defined (regardless of the package the subclass is in) and the package
in which it is defined.
That means that any class in the same package can access the variable, even if it's through a subclass within that package. This code prints 10:
Now, if that doesn't rattle your noodle, try this on for size:
So what do you think that does? Well, it prints 13, of course.
The member variable, a, is defined in package one. Therefore, the class OtherClassInOne, has access to it, even though it is accessing it via a class in another package, two.Sub.
So protected members are accessible in two situations:
1. By any class that extends the class in which it is defined.
2. By any class defined in the same package in which it is defined.
I can't think of a single situation that counters that. You can read more about proteceted access in the JLS,
§6.6.2 Details on protected Access.