I think, the protection here is a language mistake. If a class inherits protected or private from a superclass, the class loses its object.Object compatibility. And what sense can it make, in a language without multiple inheritance?