Différence entre public et private

Résolu/Fermé
nourrrrrrr Messages postés 9 Date d'inscription samedi 21 juin 2014 Statut Membre Dernière intervention 5 mai 2015 - 21 juin 2014 à 22:19
KX Messages postés 16643 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 décembre 2022 - 21 juin 2014 à 22:35
Bonjour tt le monde!
En JAVA, je veut savoir c'est quoi la différence entre un attribut X définit comme public et si on le définit comme private mais avec les deux fonctions getX() et setX(x)?
je sais qu'un attribut public est accessible partout dans la classe et qu'un attribut privé avec get et set sera aussi accessible partout dans la classe seulement par ces deux fonctions, donc c'est quoi le plus de déclarer un attribut privé avec get et set et non pas un attribut publique?
Merci

1 réponse

KX Messages postés 16643 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 décembre 2022 2 985
21 juin 2014 à 22:35
Bonsoir,

La différence c'est quand tu as d'autres classes. Un attribut public sera visible dans n'importe quelle classe, alors qu'un attribut private ne se sera visible que dans la classe qui le définit.

Tu as également des attributs protected (visibles par les classes filles), ou les attributs sans aucun des trois mots clés dans ce cas ils sont visibles par toutes les classes du package, mais pas ailleurs dans un autre package.

En pratique, il vaut mieux mettre private tout le temps, parce que sinon n'importe qui pourrait faire n'importe quoi avec tes données, ce qui peut entraîner pas mal d'erreurs.

Imagines un String, si n'importe qui peut lui mettre la valeur null par exemple, dès que tu utiliseras une méthode tu auras un NullPointerException, alors qu'avec une méthode set tu peux vérifier que la valeur n'est pas null avant de la changer.

Remarque : si tu veux vraiment donner la visibilité public à un attribut, alors il faut lui rajouter le mot clé final, comme ça tu es sûr qu'il ne changera jamais de valeur.
Mais tout privé c'est quand même le mieux.

De plus il vaut mieux utiliser les méthodes get et set pour accéder aux valeurs des attributs, même si tu es dans la même classe, c'est à dire même si tu as accès à l'attribut privé, cela permettra justement de faire les éventuels tests du set ou les transformations du get, même au sein de la classe locale.
3