web-dev-qa-db-fra.com

Java - Différence entre la classe "NomClasse" et la classe publique "NomClasse"

Quelle est la différence entre

class x {
    //code here
}

et

public class x {
    //code here
}

Parfois, je vois des exemples sur Internet et ils ont public class au lieu de class et ce sont tous des programmes simples. J'utilise class pour mes affectations et tout le monde le fait aussi

27
Alex

Dans le premier cas, la visibilité par défaut sera attribuée à votre classe, à savoir package-private (c'est-à-dire: accessible dans la même package).

Le second le rend public, c'est-à-dire visible par toute autre classe.

Référence: Contrôle de l'accès aux membres d'une classe

34

La façon la plus simple de le dire:

si tout ce que vous avez est dans le même package (le paquetage com.myschool.myapp en haut de chaque fichier), il n'y a pas de différence, mais si quelque chose veut accéder à l'extérieur de son paquet, il doit être public.

Par exemple, "String" est dans "Java.lang", votre paquet n'est certainement pas dans Java.lang, donc si string n'était pas public, vous ne pourriez pas y accéder.

9
Bill K
  • Le premier est "visibilité du package" ou "visibilité par défaut", où la classe N'est visible que par les classes du même package.
  • Ce dernier est "visibilité publique", où la classe est visible par toute autre classe.

Il existe également les modificateurs de visibilité suivants pour les membres, les méthodes et les classes internes:

  • "Visibilité protégée" est identique à package, sauf que toute classe Qui hérite de la classe définie avec une portée protégée peut également accéderit.
  • "Visibilité privée" signifie que la classe n'est accessible qu'aux utilisateurs
    lui-même.
5
Jon Newmuis

La première sera la classe par défaut, c’est-à-dire qu’elle ne peut être accédée par aucun autre paquet que lui-même, mais par d’autres classes du même paquet.

Le second le rend public, c’est-à-dire que vous pouvez y accéder depuis n’importe quelle classe d’un paquet, tout comme vous accédez à String et Array, qui sont des paquets différents.

Rappelez-vous, nous parlons de accessible à partir de packages pas classe.

Concernant, Et ensuite: si j’ai une classe X (veuillez mettre le nom de la classe en majuscule) qui n’est pas déclarée comme publique, puis-je y avoir des variables d’instance publiques (EG public string name;) ?? ;) 

Oui, bien sûr, vous pouvez avoir des variables d'instance publiques dans une classe non publique.

0
kbharuka