cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 3 janv. 2006 à 07:47
Salut,
Un membre déclaré en protected est visible uniquement dans la classe où il est déclaré et dans toutes les classes héritées de celle-ci.
Un membre déclaré sans qualificateurs (on le dit "ami") et visible partout dans le package contenant la classe.
alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 200812 3 janv. 2006 à 11:55
il me semblait que protected comme default etaient accessibles par toutes les classes du meme package. je crois que la difference est au niveau de l'heritage (mais je ne sais pas bien ou car je ne suis pas assez bon en anglais).
pour info, j'ai teste le code suivant qui fonctionne normalement :
fichier Tata.java :
package pkg1;
public class Tata {
public static void main(String[] args) {
Toto ooo = new Toto();
}
}
fichier Toto.java :
package pkg1;
public class Toto {
protected Toto() {
System.out.println("OK");
}
}
le constructeur de Toto est en "protected" mais j'arrive tout de meme a l'appeller depuis "Tata.java".
pourrais-tu me dire ou je me trompe et eclaircir mes zones d'obscurite (notamment vis a vis de l'heritage) ?
alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 200812 3 janv. 2006 à 16:53
j'ai trouve une reponse sur le site :
http://www.infres.enst.fr/~charon/coursJava/glossaire.html champ d'une classe est protégé si on lui a affecté le modificateur de visibilité <TT>protected</TT>. Un champ protégé d'une classe <TT>A</TT> est toujours visible à l'intérieur de son paquetage. A l'extérieur du paquetage de <TT>A</TT>, considérons une classe <TT>B</TT> qui hérite de <TT>A</TT> ; un champ protégé de <TT>A</TT> est hérité par <TT>B</TT> et visible directement dans <TT>B</TT> (au travers de la référence implicite <TT>this</TT>
) et visibles également au travers d'instances de <TT>B</TT> ou de sous-classes de <TT>B</TT> définies dans <TT>B</TT> ; il n'est pas visible dans d'autres conditions.
je crois comprendre que protected et default sont visible de n'importe quelle class du meme package.
ces champs ne suivent pas lors de l'instanciation a partir d'un autre package cependant ; les champs protected peuvent etre herites a partir d'un package different.