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.
la source
Java avait à l'origine un tel modificateur. Il a été écrit
private protected
mais supprimé en Java 1.0.Je suppose que c'était un jugement que la complexité supplémentaire ne valait pas le coût.
Chaque fonctionnalité de langage a un coût: en l'enseignant aux nouveaux programmeurs; dans la documentation; en l'implémentant dans le compilateur, la JVM et les outils de développement; dans le raisonnement sur l'exactitude du programme; en contraignant l'évolution future du langage; et plus. Les fonctionnalités du langage interagissent entre elles, potentiellement avec des interactions N 2 .
Quel pourcentage des programmeurs Java ont lu la spécification du langage Java et la spécification VM? Je parie que c'est un petit pourcentage, ce qui plaide pour un langage encore plus simple dans un souci de compréhension et de produits d'ingénierie sur lesquels nous pouvons compter
L'avantage de la
private protected
fonctionnalité était faible car le package est l'unité principale de modularité.la source
Le contrôle d'accès peut être considéré comme le résultat d'une couverture avec un développeur imaginaire qui travaille avec votre classe sur les méthodes et les propriétés de la classe ...
C'est public ...
C'est privé ...
C'est protégé ...
Ceci est un package.
C'est protégé privé ...
la source
Cela existe déjà. Il est protégé.
Vous avez le contrôle sur les classes qui existent dans le package. S'il n'y a pas d'autre classe dans le package et qu'une variable ou une méthode donnée est protégée, il s'agit de "sous-classes uniquement".
Cela dit, encore une fois, vous avez le contrôle sur les classes qui existent dans le package. Vous pouvez choisir de ne tout simplement pas utiliser les méthodes ou variables protégées.
la source