Private et protected en java [Fermé]

Signaler
Messages postés
116
Date d'inscription
dimanche 13 juillet 2008
Statut
Membre
Dernière intervention
6 février 2017
-
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
-
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

6 réponses

Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
325
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,
52
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
325
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
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
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
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
	}
}
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.
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
En effet, pour le y dans D, c'est non défini car friendly dans le package p
Messages postés
28
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
7 janvier 2010
5
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
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.
Messages postés
116
Date d'inscription
dimanche 13 juillet 2008
Statut
Membre
Dernière intervention
6 février 2017
35
merci bcp pour tt les explications