Téléchargement
illégal
Posez votre question Signaler

Private et protected en java

mking03 115Messages postés 13 juillet 2008Date d'inscription - Dernière réponse le 7 déc. 2010 à 22:00
Bonjour,
- variable private sont visible que dans la meme classe
- variable protected sont visibles ds les classe herité
- variables public sont visibls ds tt les classes
vous pouvez m'expliquer par des exemples
j'ai pa bien compris avec ces 3 phrase la
et merci d'avence
Lire la suite 

Private et protected en java »

9 réponses
Réponse
+12
moins plus
Bonsoir,
J'ajouterai l'exemple suivant :
public class Mere {
 private int a;
 protected int b;
 public int c;
}

public class Fille {

 public void afficher() {
  System.out.println(a); /*ne marche pas car  une variable private n'est pas visible depuis une classe fille*/
  System.out.println(b); /*marche car une variable protected est visible depuis une classe fille*/
  System.out.println(c): /*fonctionne tout le temps car c est public*/
 }

}

public class Externe { //Externe est dans un autre package que Mere et Fille
 
public void afficher() {
  System.out.println(a); // ne marche pas
  System.out.println(b); // ne marche pas
  System.out.println(c): //fonctionne tout le temps car c est public
 }

}


Enfin, si tu ne spécifies pas la visibilité, l'attribut est "package friendly", c'est-à-dire qu'il va être visible par toutes les classes qui se trouvent dans le package de ta classe.

Cordialement,
Ajouter un commentaire
Réponse
+9
moins plus
Bonjour,
M'étant apperçu durant mon sommeil que j'avais fait plein d'erreurs dans ce code, je tenais à les corriger :

Il fallait bien entendu lire public class Fille extends Mere {

Sinon, concernant la classe Externe, il faut évidemment instancier Mere :
public class Externe { //Externe est dans un autre package que Mere et Fille
 
public void afficher() {
  Mere mere = new Mere();
  System.out.println(mere.a); // ne marche pas
  System.out.println(mere.b); // ne marche pas
  System.out.println(mere.c): //fonctionne tout le temps car c est public
 }

}


Bonne continuation
Ajouter un commentaire
Réponse
+2
moins plus
bonsoir,
variable private sont visible que dans la meme classe

si ta un variable dans une classe ce dernier se peut travailler seulement dans la meme classe si il est PRIVATE et non plus extérieurement par exemple ;
class point{
private int x;
private int y;
point(int x, int y){
this.x=x;
this.y=y;
}
public String toString(){
return("*"+x+"/"+y+"*");
}
public int getX(){
return(x);
}
public int getY(){
return(y);
}
ces deux variable x et y fonctionne seulement dans la meme classe non plus dans une autre
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,

y'a-t-il concrètement une différence de comportement entre une variable déclarée comme protected et une variable dont la visibilité n'est pas définie et qui d'après ce que j'ai compris est considérée comme 'friendly'?

Merci
KX- 7 déc. 2010 à 21:18
Une variable protected de la classe A est accessible aux classes filles de A, et aux classes du même package.
Une variable "friendly" de la classe A n'est accessible qu'aux classes du même package.

Tant qu'on est dans le même package tout va bien, mais dès qu'on en utilise un autre, seul les éléments public peuvent être utilisés, ou les éléments protected dans des classes filles.

Exemple :

// A.java

package p;

public class A
{
	protected int x;
	/* friendly */ int y;
}

// B.java

package p;

public class B extends A
{
	public void f()
	{
		x=2; // défini car B extends A
		y=3; // défini car B est dans package p
	}
}

// C.java

package p;

public class C
{
	public void f()
	{
		A a = new A();
		a.x=2; // défini car x est protected dans le même package p
		a.y=3; // défini car y est friendly au package p
	}
}

// D.java

package q;

import p.*;

public class D extends A
{
	public void f()
	{
		x=2; // défini car x est protected et D extends A
		y=3; // non défini car y n'est pas friendly dans le package p
	}
}

// E.java

package q;

import p.*;

public class E
{
	public void f()
	{
		A a = new A();
		a.x=2; // non défini car x est protected dans le package p
		a.y=3; // non défini car y est friendly dans le package p
	}
}
Bzh972 - 7 déc. 2010 à 21:44
Merci beaucoup, c'est rapide et clair.
Je suppose par contre que pour le D., pour y il faut lire "est friendly dans p" ou "n'est pas friendly dans q"? Si c'est bien ça je pense avoir compris.
KX- 7 déc. 2010 à 22:00
En effet, pour le y dans D, c'est non défini car friendly dans le package p
Ajouter un commentaire
Réponse
+0
moins plus
merci bcp pour tt les explications
Ajouter un commentaire
Réponse
+0
moins plus
tite correction à propos d'une confusion qui règne en java comme je le constate :

- variable protected sont visibles ds les classe herité :

pas tout à fait :

Un élément (méthode ou variable) déclaré "protected" est en réalité visible a toutes les classes concernée par l'instance produite, ainsi par exemple une méthode peut également appeler une méthode d'une classe dérivée à condition
de le downcaster, cela passera à la compile, cependant si la zone mémoire concernée par l'instance ne contient pas l'élément (on ayant par exemple alloué de la mémoire d'une classe étant plus haute hiérarchiquement que la classe qui contient l'élément), il y a aura plantage à la l'éxecution.
Ajouter un commentaire
Ce document intitulé « private et protected en java » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?