En Java, il existe quatre modificateurs d'accès disponibles pour les méthodes:
public
- n'importe quelle classe peut utiliser cette méthode.
protected
- les classes du même package et les sous-classes de n'importe quel package peuvent utiliser cette méthode.
private
- seule cette classe peut utiliser cette méthode.
no modifier
("package private") - seules les classes du même package peuvent utiliser cette méthode.
Ce qui arrive souvent, c'est que je veux avoir des méthodes utiles dans une superclasse, que toutes les sous-classes peuvent utiliser. Mais cela n'aurait aucun sens pour les autres classes d'accéder à cette méthode, et dans un sens, cela briserait l'encapsulation.
Je dois donc déclarer ces méthodes utiles dans la superclasse public
ou protected
, ce qui les expose à toutes les autres classes au moins dans le package. Même s'ils ne sont destinés qu'à être utilisés par les sous-classes.
Y a-t-il une raison pour laquelle il n'y a pas de subclasses-only
modificateur d'accès en Java? Cela me semble très étrange. Suis-je en train de manquer quelque chose?
En outre, un subclasses-only
modificateur d'accès serait également utile lorsque vous souhaitez exposer des variables uniquement à des sous-classes. Ce qui m'arrive souvent.