2009-09-12 8 views
5

Je veux quelque chose de similaire à protected, où seulement une classe qui implémente le champ protected et tout ce qui est sous-classé peut y accéder. Donc, je veux être en mesure de déclarer une variable dans la classe de base comme private, mais toujours être en mesure d'y accéder à partir d'une sous-classe. Ceci peut être contraire à la nature même de la sous-classe private et/ou protected.Java: Modificateur d'accès plus restrictif que 'protected', moins restrictif que 'private'?

Est-ce que quelque chose comme ça existe en Java?

+0

En règle générale, exposer des variables est une mauvaise idée - même pour les sous-classes. Il y a des exceptions, mais je vous encourage à réfléchir sérieusement à la raison pour laquelle vous voulez faire cela. (Je me rends compte que la même question s'appliquerait à un appel de méthode getter - je voulais juste signaler un problème potentiel) –

Répondre

9

Il n'y a que quatre niveaux d'accès pour les champs en Java:

  • private
  • package-privé
  • (par défaut, aucun modificateur d'accès)
  • protected
  • public

protected permettra aux sous-classes, d'autres classes dans le même p ackage et les membres de la classe elle-même pour accéder au membre protected.

La réponse courte est, il n'y a aucun moyen d'atteindre exactement ce qui est désiré. Pour une description de ces quatre modificateurs d'accès, Controlling Access to Members of a Class de The Java Tutorials contient des informations plus spécifiques.

+0

Ceci est regrettable. :( –

1

Non, il n'y a pas access modifier pour faire exactement cela. Le modificateur protected est la chose la plus proche, mais cela expose le champ à n'importe quelle classe dans le même paquet ainsi qu'aux sous-classes (dans ou hors du même paquet).

2

Si vous contrôlez la base de code, vous pouvez toujours contrôler ce qui entre dans le package avec la classe de base. Si elle est seule dans son package, seules les sous-classes peuvent accéder au membre que vous souhaitez garder privé.

+0

Ceci est une bonne solution de contournement.Al-tu ne réponds pas à la question de savoir s'il y a un modificateur comme celui-là (qui n'est pas là) mais qui fournit la fonctionnalité requise. – PSIXO

0

Impossible. Vous pouvez toujours déclarer vos variables comme privées puis déclarer les méthodes publiques qui modifient les variables dans la superclasse. Vous appelez ensuite la méthode publique sur la variable.

Questions connexes