|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
Bonjour,
J'ai vraiment un problème avec la visibilité du protected. Dans la FAQ java c'est écrit: "rien" ou défaut Les variables, méthodes ou classes définies sans modificateur sont accessibles par toute classe appartenant au même package. Attention : les variables sans modificateur ne sont pas accessibles aux classes fille définies dans un autre package. protected Les variables, méthodes ou classes définies comme protégées ne sont accessibles que par les classes filles et classes du même package. Une variable protected est comme "rien" ou défaut pas accessible aux classes fille définies dans un autre package. Quel est la différence entre rien et protected ? Merci |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() ![]() Julien SanchezÉtudiant Inscription : décembre 2012 Messages : 50 ![]() |
Bonjour,
Les variables "rien" ne sont pas toujours accessibles aux classes filles. Alors que les variables protected le sont toujours.
__________________
Un logiciel est libre si vous avez le droit d'étudier son code source, de le modifier et de le redistribuer. GNU/Linux est un logiciel libre, alors que Windows et Mac OS ne le sont pas. (aide) |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Si les définitions sont juste :
- "rien" les variables,méthodes,etc.. sont accessibles par toutes les classes du même package, SEULEMENT du même package. - "protected" même package PLUS les classes enfants, même les enfants d'un autre package L'intérêt du protected c'est surtout pour laisser l'accès aux classes enfants. Personnellement je ne me suis jamais servis du "rien" ou "défaut" je met en "public" dans ce cas là. Mais bon j'ai fais peu de Java :p. |
|
|
00
|
|
|
#4 | |||
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
Citation:
L'exemple suivant le montre: Code :
|
|||
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() |
Ton context est totalement différent ;-)
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() |
Ta méthode main est static ce qui signifie qu'elle n'est pas dans le même contexte que ta classe Enfant ni même celle de Parent que tu la déclares dans ton fichier Enfant.java ou Parent.java.
De plus tu déclares un objet Parent et tu essayes d'accéder à une de ses variables protected. Ce n'est pas parce que ton objet est instancié dans une classe fille que tu vas avoir accès à ses variables protégées. Si tu veux une explication plus banale, tu peux te dire que cette méthode n'a pas de classe etpeux être déclarée n'importe tout. Si tu veux accéder à ta variable protected, il te faudra créer une méthode qui n'est pas static dans ta classe Enfant et l'utilisé directement et non pas instancié un objet Parent puisque par héritage ton objet Enfant est automatiquement un objet parent. |
|
00
|
|
|
#8 |
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
En effet dans les méthodes static tu ne peux pas accéder à ta classe direction vu qu'on peu utiliser ces méthodes sans instancier d'objet de cette classe.
De ce fait "this" n'existe pas dans une méthode static. Et puis initialiser tes variables de la sorte me semble un peu bizarre. Je ferai un constructeur par défaut à ta place |
|
|
01
|
|
|
#9 | |
![]() ![]() |
Citation:
Une variable private et une variable default non-static peuvent très bien être accédées dans un contexte static. Le problème exposé ici ne se pose qu'avec protected, et avec aucune autre visibilité. protected, dans le cas non-static, a une particularité. Il a la même visibilité que default, mais une classe fille peut également voir les propriétés protected des classes mères sur l'instance en cours. Et sur l'instance en cours seulement. En contexte static il n'y a pas d'instance en cours, donc pas d'accès. Mais même en contexte non-static, on ne peut pas accéder aux variables protected des autres instances. Alors que la visibilité de private et default ne s'intéresse pas du tout à s'il y a une instance en cours. Et alors ? C'est pas la question.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais. Partagez vos connaissances, mais aussi comment s'en servir. |
|
|
|
01
|
|
|
#10 | ||
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
Citation:
Citation:
Je pose cette question de protected et de visibilité car c'est exactement le style de questions que l'on trouve dans l'examen pour l'obtention du SCJP Oracle. |
||
|
|
01
|
|
|
#11 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
J'ai parcouru le site et trouvé cette page:
http://armel-ndjobo.developpez.com/t...ontrole-acces/ L'auteur dit au chapitre VII: Protected : il est presque identique au modificateur par défaut. Cependant, en plus des classes du même package, les classes dérivées peuvent accéder aux elements protected d'une classe. Et dans le tableau qui suit on voit qu'au sein d'une sous-classe dans un package différent protected permet d'accéder par héritage. J'aurais simplement voulu un exemple. Merci |
|
|
00
|
|
|
#12 | ||
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Re. Désolé pour mon hors sujet alors...
Exemple : Code :
|
||
|
|
10
|
|
|
#13 |
|
Membre du Club
![]() Inscription : juin 2004 Messages : 64 ![]() |
Merci pour les explications. C'est nettement plus clair !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com