CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Pourquoi ne pas tout déclarer public ?

Rafya
Rafya
Niveau 7
12 décembre 2014 à 22:09:47

Bonjour :)

Je commence le java et à ce stade de mon apprentissage je ne vois pas l’Intérêt de limiter les méthodes avec private ou protected, et ça m'empêche de comprendre clairement leur effet. Si quelqu'un voudrait bien me donner un exemple, je suis preneur :hap:

Merci par avance

Bunyan
Bunyan
Niveau 17
12 décembre 2014 à 22:52:00

Principes d'encapsulation et de responsabilité.

Une classe est responsable de ce qu'elle contient, et elle seule normalement peut jouer avec ses valeurs. Ca permet de contrôler ce qu'il se passe et de limiter les points d'entrés et d'accès, et donc de faciliter le refactoring et la maintenance.

Tu as certains traitements aussi que tu ne souhaites pas révéler, ou qui n'ont pas de sens en dehors de la classe, d'où la visibilité privée pour les méthodes.

Pour des cas triviaux, comme la classe Point du SDK Java par exemple, tu peux mettre en "public". Très peu d'impact, très peu d'intérêt de mettre en privée, pas besoin de contrôles poussés... grosso-modo, cela concerne tout les conteneurs simples sans logique.
Autrement... s'il y a un peu de logique, il faut pouvoir la contrôler, et éviter le plus possible les effets de bords.

Si je pousse un peu plus loin ton idée, pourquoi ne pas tout déclarer en variables globales ? Tout est accessible de partout, et comme ça, pas de problème :)

Ps : tu as oubliés la visibilité par défaut, celle sans mot-clef, package.

Ps ² : "private" NE signifie ABSOLUMENT PAS que seule la classe y a accès. C'est la classe ET celles du même package ;)

RogerLeCaillou
RogerLeCaillou
Niveau 10
12 décembre 2014 à 23:42:42

"Ps ² : "private" NE signifie ABSOLUMENT PAS que seule la classe y a accès. C'est la classe ET celles du même package ;)"

T'es sûr de ça ? :doute:

Non je confirme, il y a même carrément erreur à la compilation :

package test;

public class A {
    private int a = 5;
}
package test;

public class B {
  public static void main(String[] args) {
    A a = new A();
    System.out.println(A.a);
  }
}
λ javac A.java B.java
B.java:6: error: a has private access in A
                System.out.println(A.a);
                                    ^
1 error

Private c'est la classe et uniquement la classe.
Protected c'est la classe, ses sous-classes et les classes du même package.
Package (ou private-package) c'est la classe et son package.
Public c'est le monde.

Message édité le 12 décembre 2014 à 23:47:41 par RogerLeCaillou
RogerLeCaillou
RogerLeCaillou
Niveau 10
12 décembre 2014 à 23:49:17

package-private* pas private-package

Bunyan
Bunyan
Niveau 17
13 décembre 2014 à 00:02:46

P'tain... écrire des trucs intelligent passé une certaine heure, c'est pas une bonne idée x)
Oui, tu as raison. J'ai confondu avec "protected". Vu que ça semble être un apprenant en début d'apprentissage, je voulais signifier que "protected" ne signifie pas que les classes filles, mais aussi le package. Me suis planté dans mon écriture. Zut x)

RogerLeCaillou
RogerLeCaillou
Niveau 10
13 décembre 2014 à 00:57:23

Ah je comprends mieux x)

Bonne remarque pour le protected par contre, on a tendance à penser qu'il offre l'accessibilité uniquement à la classe et à ses sous-classes, mais il offre aussi la visibilité au package, c'est trop souvent oublié.

Pseudo supprimé
Pseudo supprimé 13 décembre 2014 à 05:29:25

en principe, une classe n'a de publique que la/les interface(s) qu'elle implémente.

http://fr.wikipedia.org/wiki/Interface_de_programmation
http://en.wikipedia.org/wiki/Dependency_inversion_principle

Note que si tu suis le principe jusqu'au bout, priver/public n'a plus d'importance vu que tu n'utilises pas les classes directement mais seulement au travers d'interfaces.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment