En Java, hay cuatro modificadores de acceso disponibles para los métodos:
public - Cualquier clase puede usar este método.
protected - las clases en el mismo paquete y las subclases en cualquier paquete pueden usar este método.
private - Solo esta clase puede usar este método.
no modifier ("paquete privado"): solo las clases del mismo paquete pueden utilizar este método.
Lo que sucede a menudo es que quiero tener métodos útiles en una superclase, que todas las subclases puedan usar. Pero no tendría sentido para otras clases acceder a este método, y en cierto sentido rompería la encapsulación.
Así que tengo que declarar estos métodos útiles en la superclase publico protected, que los expone a todas las demás clases al menos en el paquete. Aunque solo están destinados a ser utilizados por las subclases.
¿Hay alguna razón por la cual no hay un subclasses-onlymodificador de acceso en Java? Me parece muy extraño. ¿Me estoy perdiendo de algo?
Además, un subclasses-onlymodificador de acceso también sería útil para cuando desee exponer variables solo a subclases. Lo que a mí me pasa mucho.