IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Problème d'utilisation du mot clé "protected"


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Sans activité
    Inscrit en
    Novembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Sans activité

    Informations forums :
    Inscription : Novembre 2014
    Messages : 23
    Par défaut Problème d'utilisation du mot clé "protected"
    Bonjour,

    je suis actuellement un tuto sur les classes et les héritages.

    On y explique que pour protéger une variable d'une erreur de programmation, celle-ci est déclarée private.
    Pour qu'une classe héritée (je ne l'ai pas encore créée) puisse néanmoins avoir accès à la variable sans, pour autant, lever la protection au niveau des utilisateurs, il suffit donc de remplacer private par le mot clé protected.

    voici donc mon programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package projet3;
     
    public class Principal {
     
    	public static void main(String[] args) 
    	{
    		Ville v0=new Ville("Paris",100,"France");
    		System.out.println(v0.cap);
    		v0.cap="Modif";
    		System.out.println(v0.cap);
    	}
    }
    et voici la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package projet3;
     
    public class Ville {
    	protected String cap, pays;
    	protected int hab;
     
    	public Ville()
    	{
    		cap="Default Capitale";
    		hab=0;
    		pays="Default Pays";
    	}
    	public Ville(String aa, int bb, String cc)
    	{
    		cap=aa;
    		hab=bb;
    		pays=cc;
    	}
     
    }
    Si j'ai bien compris, avec protected, je ne suis donc pas en mesure de modifier les valeurs de v0 à partir de mon programme Principal.
    Pourtant, je n'ai aucun mal à changer la valeur de la variable cap, sans faire appel à un mutateur et voici le résultat lorsque je lance programme.

    Nom : Screen Shot 2014-11-23 at 12.45.49.png
Affichages : 216
Taille : 246,5 Ko

    Est ce moi qui n'ai pas compris le principe d'utilisation de protected ?

    merci d'avance pour vos explications.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    protected autorise aussi l'accès aux classes qui sont dans le même package, or tes deux classes sont dans le package projet3.

    Concrètement il y a quatre niveaux de permission d'accès :

    - private : classe en cours uniquement
    - par défaut, aucun mot-clé, (en général appelé package-private) : uniquement les classes du même package.
    - protected : les classes du même package plus les classes filles et descendantes.
    - public : tout le monde.

    On notera que quand les permissions s'étendent, elles incluent aussi les permissions au-dessus : package-private autorise bien sûr la classe en cours, protected autorise le package en cours, et public autorise évidemment les sous-classes en plus de tout le monde aussi.

    Conclusion :

    Oui, d'habitude on protège les variables par private. Mais quand on veut que les sous-classes puissent y accéder, il faut étendre la permission à protected. Ce qui l'étend aussi aux autres classes rangées au même endroit.
    Ce qui veut dire que ces autres classes ont un peu responsabilité à savoir ce qu'elles font et à ne pas y toucher si elles n'en ont pas besoin. Si elles n'en étaient pas capables, elles ne seraient pas dans le même package, elles seraient rangées ailleurs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Sans activité
    Inscrit en
    Novembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Sans activité

    Informations forums :
    Inscription : Novembre 2014
    Messages : 23
    Par défaut
    Merci pour le complément d'info... qui valide le résultat obtenu lors du lancement du programme.

    Ce que semble suggérer le cours est donc erroné.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Laudec Voir le message
    Ce que semble suggérer le cours est donc erroné.
    Pas particulièrement, c'est juste qu'en situation réelle deux classes sont rarement dans le même package.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Sans activité
    Inscrit en
    Novembre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Sans activité

    Informations forums :
    Inscription : Novembre 2014
    Messages : 23
    Par défaut
    merci pour cette autre précision... je pense que ce sont des situations, pour l'instant, un peu prématurées, en ce qui concerne.

    cordialement.

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    remarque (faite déjà à plusieurs occasions dans ce forum)
    en fait le modificateur de portée protected est un peu plus compliqué que ça.
    En gros ça veut dire: cet élément est un mécanisme interne qui peut être utilisé en propre par une instance d'une sous-classe mais c'est pas un "service" (rendu à l'extérieur).
    kexa veut dire? ben que dans une sous-classe tu ne peux accéder ainsi qu'aux éléments qui t'appartiennent en propre (par this) tu ne peux pas avoir accès à ceux d'une autre instance de la super-classe (on d'une de ses dérivées).
    C'est malheureusement pas expliqué dans beaucoup de bouquins (ou de cours)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème d'utilisation liste déroulante après protection feuille
    Par jessy2010 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2012, 20h10
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo