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] différence entre default et protected?

3hr15
3hr15
Niveau 6
29 février 2020 à 17:44:38

Je débute en Java et j'arrive pas à saisir la différence entre les 2
Je m'explique

J'ai une classe main et une classe constructeur avec des variables d'instance
On me dit de déclarer les variables de mon objet en private pour pas que je puisse y toucher directement depuis une autre classe ( et de rajouter des accesseurs )

Ensuite si je veux créer un 2 ème objet et qu'il hérite de mon premier constructeur je dois changer les variables d'instance en protected au lieu de private
Mais à ce moment là la classe main ( et toutes les autres ) ont de nouveau accès aux variables déclarées protected donc ça sert absolument à rien de les déclarer ainsi ?
La restriction recommence à marcher que quand je crée un package et que j'isole l'objet et sa superclasse des autres classes en les mettant dans un dossier distinct

Mais ça sert à rien vu que laisser des variables en default les limite aussi au package où elles sont

Je vois vraiment pas la différence entre default et protected ni l'utilité de ce dernier je bloqué vraiment là dessus ça me frustre si quelqu'un peut m'éclairer ça serait apprécié

JScestpourri
JScestpourri
Niveau 4
29 février 2020 à 17:50:27

kamoulox

3hr15
3hr15
Niveau 6
29 février 2020 à 17:52:05

kamoulox

pardon? :hap:

Refeuh
Refeuh
Niveau 28
29 février 2020 à 19:32:08

à ce moment là la classe main ( et toutes les autres ) ont de nouveau accès aux variables déclarées protected

Non, uniquement les classes derivees, dans la structure de l'heritage. Ce que tu decris serait le comportement avec mot clef "public", et non "protected"

3hr15
3hr15
Niveau 6
29 février 2020 à 19:48:49

Non, uniquement les classes derivees, dans la structure de l'heritage. Ce que tu decris serait le comportement avec mot clef "public", et non "protected

c'est ce qui me paraît cohérent aussi et pourtant je peux t'assurer qu'avec protected je peux appeler les variables à partir de la méthode main
Et à partir de n'importe quelle autre classe si elles sont static ( j'arrive pas à initialiser d'objet dans une classe autre que la main)

Je suis pas chez moi pour le moment mais je posterais le code après

lokilok
lokilok
Niveau 16
29 février 2020 à 19:49:10

[19:32:08] <Refeuh>

à ce moment là la classe main ( et toutes les autres ) ont de nouveau accès aux variables déclarées protected

Non, uniquement les classes derivees, dans la structure de l'heritage. Ce que tu decris serait le comportement avec mot clef "public", et non "protected"

Non, en Java "protected" veut dire que c'est accessible par les classes dérivées ET par toutes les classes du package, qu'elles soient dérivées ou pas.

lokilok
lokilok
Niveau 16
29 février 2020 à 19:52:09

Du coup la différence c'est que "package private" (la visibilité par défaut) c'est uniquement dans le package, alors que "protected" c'est dans le package + dans les classes dérivées (même hors package).

Refeuh
Refeuh
Niveau 28
29 février 2020 à 19:52:33

Ah pardon, au temps pour moi ! Mon experience de Java remonte a tellement longtemps que je n'avais pas cette difference en tete.

3hr15
3hr15
Niveau 6
29 février 2020 à 19:59:17

Du coup la différence c'est que "package private" (la visibilité par défaut) c'est uniquement dans le package, alors que "protected" c'est dans le package + dans les classes dérivées (même hors package)

Ah ok c'est tout bête
Merci j'arrivais vraiment pas à saisir la nuance

3hr15
3hr15
Niveau 6
01 mars 2020 à 13:58:39

Ducoup j'ai une autre question en fait :hap:
À quoi ça sert de déclarer protected si on peut même pas séparer la superclasse et la classe fille dans des packages différents ?

À chaque fois que je le fais j'ai l'erreur " cannot fond symbol " au niveau du mot clé extends :(

Le seul moyen que j'ai trouvé c'est si je met la superclasse dans un package mais que je laisse la classe fille dans le répertoire principal auprès de la classe main ( et que j'importe la classe mère à partir de la fille )

ça me permet de protéger les variables d'instance protected de la superclasse mais si pour x raisons je veux également des variables protected et ( non private )dans la classe fille ça les rend accessibles à partir de la méthode main ( parce que, je me répète, la classe main est avec la subclass )

Y'a des déclarations à faire en plus quand on veut faire de l'héritage dans des packages séparés ?

( Merci )

Bunyan
Bunyan
Niveau 17
05 mars 2020 à 08:32:45

En général, les objets sont déclarés publiques, et les méthodes ou attributs sont déclarés protected.
Il est assez rare que des objets soient eux-même déclarés protected.

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