Question

Je réalise que c’est une question très fondamentale, mais c’est une question qui m’a toujours préoccupée. Si je comprends bien, si vous déclarez un champ privé en Java, il ne sera pas visible en dehors de cette classe. S'il est protégé, il est disponible pour les classes héritées et pour tout ce qui se trouve dans le même package (corrigez-moi si l'une ou l'autre de ces définitions est incorrecte).

Cela signifie-t-il qu'il n'est pas possible de déclarer un champ accessible uniquement aux classes héritées et pas aux autres classes non héritées du même package?

Je comprends qu’il existe des solutions, mais existe-t-il des cas où vous souhaiteriez avoir ce type de comportement?

Évidemment, la question ci-dessus s’applique tant aux méthodes qu’aux champs.

Merci beaucoup.

Était-ce utile?

La solution

Voir: http://java.sun.com/ docs / books / tutorial / java / javaOO / accesscontrol.html
Paquet > Sous-classes, vous ne pouvez jamais avoir un champ uniquement visible par les sous-classes mais pas par les classes du même package.

Autres conseils

Fondamentalement:

  • private: accessible uniquement par la classe.
  • public: accessible à toutes les classes.
  • protected: accessible par la classe, toutes les classes héritées et les classes du package actuel (édité) .
  • aucune étendue définie: accessible par toutes les classes du package actuel.

plus d'informations ici .

Oui, l'accès protégé de Java est un peu étrange de cette façon. Je ne vois pas tout de suite pourquoi c'est souhaitable. Personnellement, cela ne me dérange pas pour les champs car je n'aime pas les champs non privés de toute façon (autres que les constantes), mais il en va de même pour les autres membres.

.NET n'a pas du tout le concept de visibilité d'accès aux paquets / espaces de noms, mais il a une alternative qui est l'assemblage (pensez "fichier jar" - pas exactement la même chose, mais fermez). Franchement, j'aimerais disposer des options de visibilité des unités de déploiement et dans l'espace de noms, mais il me semble que je suis condamné à la déception ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top