Bonjour,
Est-ce qu'une variable peut être protected et en même temps private. Si oui comment ça s'écrit?
Merci
Bonjour,
Est-ce qu'une variable peut être protected et en même temps private. Si oui comment ça s'écrit?
Merci
Est-ce qu'une variable peut être à la fois (1) uniquement visible par la classe où elle est définie, et (2) également visible par les classes qui en dérivent et les autres classes du package ?
Bah, euh, nan
=> que voulais-tu dire par "private" et "protected" ? que cherches-tu à faire ?
En fait le prof me donne un énoncé et il dit que toutes les variables sont protégées. Et il dit aussi que l'une d'entre elles doit être traitée par un modifieur (mutateur) et 2 autres par un accesseur.
Ca implique qu'il y a des variables qu'elles sont à la fois protected et private. Non?
à moins de me trompé une variable peut être Protected (voir même Public), mais avoir des getters/setters (mutateurs/accesseurs). Certes c'est contre productif, fait faisable. Donc je ne vois pas vraiment où est le problème.
Merci pour vos réponses. Donc si j'ai compris, je peux utiliser un mutateur et un modifieur avec un protected mais cela ne sert à rien. C'est ça? Et qu'est-ce qu'un package?
Qu'est-ce qu'un package... euh... mince je ne suis pas sure de savoir l'expliquer succintement
Pour s'y retrouver sur notre disque dur, nous rangeons nos fichiers dans des dossiers, avec une arborescence plus ou moins profonde (ex : documents>photos>2009>annivBidule).
Eh bien on fait pareil avec les classes Java, pour s'y retrouver on les range dans des packages (ex : java.util contient tout un tas de classes "utiles" pour de la programmation courante et contient plusieurs sous-packages plus spécifiques, comme java.util.zip ou java.util.regex).
Avant de définir une classe, tu dois indiquer à quel package elle appartient :
et ensuite tu peux utiliser cette classe en l'appelant par son nom complet (com.monprog.test.Test1) ou en effectuant un import préalable (import com.monprog.test.Test1; ou import com.monprog.test.*).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 package com.monprog.test; class Test1 {...}
Pour revenir à la question :
Définir des accesseurs sur une variable protected n'est pas idiot, ni inutile.
Si l'on veut qu'une variable définie dans une classe soit visible par les classes qui en héritent, alors il faut la déclarer protected (ou carrément public bien sûr). Si de plus on veut pouvoir accéder à cette variable depuis un autre package, il va falloir des accesseurs public.
Le problème c'est que Java ne permet pas de différencier visibilité par héritage et visibilité par package :
- private => visible par la classe uniquement
- protected => visible par la classe, par ses classes filles, et par les autres classes du même package
- public => visible par tout le monde
Du coup il peut sembler inutile de définir des accesseurs sur une variable protected (définie ainsi parce qu'on a besoin de l'utiliser par héritage) puisque de toutes façons toutes les autres classes du même package y auront librement accès (sauf que, comme je l'ai dit plus haut, depuis un autre package les accesseurs public seront nécessaires).
Pour comparer, en C# les deux notions sont séparées :
- private => visible par la classe uniquement
- protected => visible par la classe et par ses classes filles
- internal => visible par la classe et par les autres classes du même package
- public => visible par tout le monde
et on peut cumuler protected et internal si besoin...
Partager