Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec les variables déclarées PROTECTED

    19 octobre 2008 à 18:48:49

    Bonsoir,
    En avançant dans le cours du java j'ai eu des difficulté avec le mot "PROTECTED"

    j'ai créeé la classe mère ville qui a comme code:

    public class Ville {
    //Stock le nom de notre ville
    	protected String  nomVille;
    //Stock le nom du pays de notre ville
    	protected String nomPays;
    //Stock le nombre d'habitants de notre ville
    	protected int nbreHabitants;
    //Stock la catégorie de notre ville
    	protected char categorie;
    //Variable de classe publique qui compte les instances
    	protected static int instance=0;
    //Variable de classe privvée qui compte les insances
    	protected static int instanceBis=0;
    	
    	public Ville(){
    		instance++;
    		instanceBis++;
    		nomVille="Inconnu";
    		nomPays="Inconnu";
    		nbreHabitants=0;
    		categorie=this.categorieVille();
    	}
    	public Ville(String pNom,int pNbre,String pPays){
    		instance++;
    		instanceBis++;
    		nomVille=pNom;
    		nbreHabitants=pNbre;
    		nomPays=pPays;
    		categorie=this.categorieVille();
    	}
    	//***************************
    	//		Les accesseurs
    	//***************************
    	
    	public String getnomVille(){
    		return(nomVille);
    	}
    	public String getnomPays(){
    		return(nomPays);
    	}
    	public int getnbreHabitants(){
    		return(nbreHabitants);
    	}
    	public static int getinstanceBis(){
    		return(instanceBis);
    	}
    	
    	//***************************
    	//		Les mutateurs
    	//***************************
    	public void setnomVille(String name){
    		nomVille=name;
    	}
    	public void setnomPays(String country){
    		nomPays=country;
    	}
    	public void setnbreHabitants(int habitants){
    		nbreHabitants=habitants;
    	}
    	//***************************************************
    	//	méthode qui détermine la catégorie de notre ville
    	//***************************************************
    	
    	private char categorieVille(){
    		int i=0;
    		int bornesSuperieures[]={0,1000,10000,100000,500000,1000000,5000000,10000000};
    		char categories[]={'?','A','B','C','D','E','F','G','H'};
    		while (i<bornesSuperieures.length && nbreHabitants>=bornesSuperieures[i])
    			i++;
    		
    		char cat=categories[i];
    		return (cat);
    	}
    	public char getCategorie(){
    		return (categorie);
    	}
    	public String decritToi(){
    		return ("\t"+this.nomVille+" est une ville de "+this.nomPays+", elle comporte "+this.nbreHabitants+" habitants \n\t ==> elle donc de catégorie "+this.categorie);
    	}
    	//*********************************************************************
    	//	méthode qui compare deux ville par rapport au nombre d'habiants
    	//*********************************************************************
    	public void comparer(Ville v){
    		if (this.nbreHabitants>v.getnbreHabitants()){
    			System.out.println("La ville "+this.nomVille+" est plus peuplé que la ville "+v.getnomVille());
    		}
    			else{
    				System.out.println("La ville "+this.nomVille+" est moins peuplé que la ville "+v.getnomVille());
    			}
    		
    	}
    }
    


    et une autre classe Capitale qui hérite la classe Ville, son code est comme suit:

    public class Capitale extends Ville {
    		private String president;
    		//Constructeur par défaut
    		public Capitale(){
    			//Ce mot clé appele le constructeur de la classe mère
    			super();
    			president="Aucun";
    		}
    		
    		//Constructeur d'initialisation de la classe capitale
    		public Capitale(String nomCapitale,int nbreHabitants,String nomPays,String president){
    			super(nomCapitale,nbreHabitants,nomPays);
    			this.president=president;
    		}
    		
    		//Description d'une capitale
    		public String decritToi(){
    			String str=super.decritToi()+"\n\t===> "+this.president+" est son président";
    			return (str);
    		}
    		
    		//retourner le nom du président
    		public String getPresident(){
    			return(this.president);
    		}
    		
    		//Définir le nom du président
    		public void setPresident(String nom){
    			this.president=nom;
    		}
    	
    	}
    


    et le code de la classe principale est comme suit:

    public class sdz1 {
    
    	
    	public static void main(String[] args) {
    		Ville v1=new Ville("Alger",2000000,"Algérie");
    		System.out.println(v1.nomPays);
    		Capitale c1=new Capitale("Anaba",20000,"Algérie","Boutef");
    		System.out.println(c1.nomPays);
    	}
    
    }
    


    le résultat est le suivant:
    en m'affiche deusx fois le pays : Algérie.

    je suis en phase d'apprentissage et j'aimerai bien éclaircir tous ce qui me semble ambigu, ma question est la suivante:

    je ne vois pas l'utilité du mot protected utilisé dans la déclaration des variables et des méthodes de la classe mère Ville?
    il y a une phrase dans le cours de l'héritage qui dit: "En remplaçant la déclaration des variables et des méthodes privées de la classe Ville en protected, cela aura pour effet de toujours protéger l'accès à celles-ci depuis du code utilisant un objet Ville ; mais cela permet aux classes qui héritent de cette dernière d'y avoir accès !"

    et dans mon code j'ai utilisé un objet ville (v1) et je vois qu'il accède le plus normalement possible à la variable déclarée protected (nomPays).
    Expliquez moi SVP le role de protected.
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      19 octobre 2008 à 19:15:09

      protected à une portée un peu particulière: non seulement l'attribut est accessible par les classes héritantes mais également par les classes du package (protected a donc une visibilité plus étendue que package).
      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2008 à 20:02:58

        Merci pour votre réponse...mais...
        Pouvez vous m'expliquer donc la différence entre PROTECTED et PUBLIC
        Merci
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          19 octobre 2008 à 20:10:05

          Tout simplement que public à une visibilité plus large, on peut accéder aux éléments public depuis tout le programme alors que protected est limité au package et aux classes héritées.
          • Partager sur Facebook
          • Partager sur Twitter

          Problème avec les variables déclarées PROTECTED

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown