web-dev-qa-db-fra.com

Une classe est-elle privée ou publique par défaut dans Java et C ++?

Les classes sont-elles privées ou publiques par défaut dans Java et C++?

26
the_learner
  • Java:

    Par défaut, la visibilité des classes est privée du package, c'est-à-dire uniquement visible pour les classes du même package.

  • C++:

    La classe n'a pas de visibilité définie comme en Java. Ils sont visibles si vous les avez inclus dans l'unité de compilation.

38
zeller

En Java, une classe de niveau supérieur est publique ou non publique. Il n'y a pas de "privé". Vous ne pouvez utiliser que le mot clé public ou le laisser désactivé. Si vous la laissez désactivée, elle n'est pas publique, c'est-à-dire visible uniquement pour les autres classes du même package.

Une classe imbriquée, c'est-à-dire une classe à l'intérieur d'une autre classe, peut être rendue publique, package-privée, protégée ou privée, comme tout autre membre de la classe. La valeur par défaut (c'est-à-dire celle sans modificateur) est package-private, visible uniquement par les classes du même package.

EDIT: Vous avez oublié la réponse C++, alors voyez (et votez) la réponse de @ zeller. :)

17
Ray Toal

Selon §6.6.1 du JLS ,

Si une classe de niveau supérieur ou un type d'interface n'est pas déclaré public, il ne peut être accédé qu'à partir du package dans lequel il est déclaré.

Ainsi, une classe Java est par défaut package-private .

Cependant, cela ne s'applique pas au C++. Une classe manque de visibilité - seuls ses membres peuvent avoir le contrôle d'accès. Voir §11 de la norme C++ 11 pour plus d'informations sur le contrôle d'accès des membres. Voici un extrait du ¶1 ...

Un membre d'une classe peut être

  • private; c'est-à-dire que son nom ne peut être utilisé que par les membres et amis de la classe dans laquelle il est déclaré.
  • protected; c'est-à-dire que son nom ne peut être utilisé que par les membres et amis de la classe dans laquelle il est déclaré, par les classes dérivées de cette classe et par leurs amis (voir 11.4).
  • public; c'est-à-dire que son nom peut être utilisé n'importe où sans restriction d'accès.
13
oldrinb