I had questions like this elsewhere. I think I understand this, but let me express it and tell me if I really do understand it or I am just too confused to know the reality
A superclass extended by a subclass will have all its code accessable to the subclass. Now, if the superclass is in different package than the subclass, a subclass will only be able to access a protected field/method if the subclass create an object of itself (since this subclass object would inherat all the stuff in the superclass). If the subclass create an object that is the superclass type, then that object is treated like a normal object created from types that this subclass has not extend, therefor its protected field/method can't be accessed.