Declaring the print method as protected allows it to be inherited by the subclass BaseParent.
When code within BaseParent references its own (inherited) version of "print", this is allowed because it has become part of that subclass.
However, the subclass still cannot reference the parent class's own version of the method (though being in the same package would overrule this) because the "protected" keyword only allows subclasses in other packages to inherit and use their own versions of the method.
After struggling for a while to grasp why the error turns up, that is how I have come to think about it.
Oracle's documentation in section 6.6.2 http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.2.1 states this in their own way:
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object
thus BaseParent is responsible only for its own inherited print methoid, and not the original in the parent class.