Partage
  • Partager sur Facebook
  • Partager sur Twitter

Explications appel de méthode

    6 décembre 2008 à 23:53:06

    Bonjour a tous, je résume la situation, j'ai une classe Activité. J'ai aussi une classe Entreprise qui hérite de activité.
    J'ai aussi une classe Adresse.

    Je souhaite ajouter dans ma classe Entreprise un appel a ma méthode qui définie une adresse.

    Ceci est ma classe Entreprise:

    1. package app;
       
        public class Entreprise extends Activite {
       
        protected Entreprise(String n, String p) { 
             super(n, p);
        }     
      }
    


    Ceci est ma classe Adresse:

    package app;
      
       //default constructor  
       public class Adresse {
      
       protected String numeroEtRue;
       protected String codePostal;
       protected String ville;
      
       public Adresse (String nEr, String cP, String v) {
      
       numeroEtRue=nEr;
       codePostal=cP;
       ville=v;
      
       }
       //setters
       public void setAdresse(String nER, String cP, String v) {
       this.numeroEtRue=nER;
       this.codePostal=cP;
       this.ville=v;
           }
      }
    


    Je présume que je doit modifier mon constructeur de la classe Entreprise mais je n'y arrive pas.

    Merci a tous.
    • Partager sur Facebook
    • Partager sur Twitter
      7 décembre 2008 à 1:12:05

      Déjà pourquoi ta classe et ton constructeur sont en protected et pas public ?

      Sinon tu fais

      package app;
      public class Entreprise extends Activite {
      private Adresse adr
      public Entreprise(String n, String p) {
      super(n, p);
      this.adr = new Adresse("Chez Moi", "75", "Paris");
      }
      }


      Ca marcherais, sinon je ne vois pas trop ou est le pb :s
      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2008 à 11:50:05

        En faite je veux que lorsque je délcare une nouvelle entreprise dans mon main que celle ci est automatiquement une adresse, avec ta solution si j'ai bien compris je suis obligé de déclaré mon adresse dans ma classe entreprise directement.
        • Partager sur Facebook
        • Partager sur Twitter
          7 décembre 2008 à 12:23:00

          Bah ce que tu peux faire c'est dans ton constructeur rajouté un argument adresse

          Dans ce que j'ai fait, j'ai définit une adresse et je lui attribue une valeur par "défaut"
          • Partager sur Facebook
          • Partager sur Twitter
            7 décembre 2008 à 13:53:41

            déjà comme plorf te l'a dis retire le "protected" sinon seul les classes filles pourront appeler le constructeur
            donc

            ici 3 constructeurs possibles.

            Soit ça initialise une Adresse ..
            tu devra par la suite utiliser la fonction
            "setAdresse" pour pouvoir dire ce que tu veux comme adresse
            Soit tu lui donne directement une adresse (toujours l'idée de plorf)

            Soit tu donnes direct les paramètres

            package app;
               private Adresse Adr;
            
                public class Entreprise extends Activite {
               
                public Entreprise(String n, String p) { 
                     super(n, p);
                     Adr = new Adresse();
                }
                public Entreprise(String n, String p,Adresse ouhou) { 
                     super(n, p);
                     Adr = ouhou;
                }  
                public Entreprise(String n, String p,String nEr, String cP, String v) { 
                     super(n, p);
                     Adr = new Adresse(nEr,cP,v);
                }  
              }
            



            package app;
              
               //default constructor  
               public class Adresse {
              
               protected String numeroEtRue;
               protected String codePostal;
               protected String ville;
              
            
            public Adresse () {
              
               numeroEtRue="default";
               codePostal="default";
               ville="default";
              
               } 
               public Adresse (String nEr, String cP, String v) {
              
               numeroEtRue=nEr;
               codePostal=cP;
               ville=v;
              
               }
               //setters
               public void setAdresse(String nER, String cP, String v) {
               this.numeroEtRue=nER;
               this.codePostal=cP;
               this.ville=v;
                   }
              }
            

            • Partager sur Facebook
            • Partager sur Twitter
              7 décembre 2008 à 15:25:20

              Ok, merci pour vos précisions.

              Je vais essayer de prendre le pb a l'envers:

              Si j'ai ces deux lignes de code dans mon main:

              Personne maman=new Personne("Belle","Simone");
              maman.setAdresse(new Adresse("Rue de la Paix","89000","Turcoing"));
              


              A quoi resemble la méthode setAdresse présente dans ma classe Personne?



              • Partager sur Facebook
              • Partager sur Twitter
                7 décembre 2008 à 15:31:07

                ben .... facile :p

                public void setAdresse(String nER, String cP, String v) {
                         Adr.setAdresse(nER,cP,v);
                    }
                


                (tu as lut l'entièreté du tuto de java ?)


                dans les classes que je t'ai montré, lorsque que tu créé un Objet "Personne", tu créé aussi un objet Adresse que tu peux modifier par le biais de ta classe "Personne" parce qu'il est en "protected"

                mais ça reste un objet Adresse ... ses fonctions restent les même .. et tans que c'est l'objet "Personne" qui les appellent il n'y a pas de problèmes

                Au passage tu devrais aussi créé les fonction
                public void setAdresse(Adresse NiewObjectAdresse){
                 Adr = NiewObjectAdresse;
                }
                

                et
                public Adresse getAdresse(){
                 return Adr;
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                  7 décembre 2008 à 15:36:40

                  oui je l'ai lu! :'(

                  Ce que tu a donné fut ma première idée mais j'ai ce type d'erreur avec cette soluce:

                  The method setAdresse(String, String, String) in the type Personne is not applicable for the arguments (Adresse)
                  


                  ps: j'ai pas vu ton édit, je le lit maintenant ;d

                  Ok j'ai plus l'erreur grâce a cela!

                  public void setAdresse(Adresse NiewObjectAdresse){
                   Adr = NiewObjectAdresse;
                  }
                  


                  Faut que je comprenne pourquoi maintenant...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 décembre 2008 à 20:11:33

                    ben lis le message d'erreur il est explicite :p


                    il te dis qu'il ne peut pas appeler la méthode (String, String , String)
                    parce ce que tu lui met en parametre c'est (Adresse) ...

                    ton constructeur à besoins de 3 String pour fonctionner ....
                    et toi tu lui donnes un Objet que tu as créé toi même .... comment peut il savoir que les 3 string que tu veux lui donner se trouve a l'intérieur de ton objet ?

                    donc la solution réside en créant un nouveau constructeur qui lui prend (Adresse objet) comme argument
                    Comme ça si tu lui donne un objet de Type Adresse, il sait comment l'exploiter

                    (fais bien attention avec ton code comme il est !!! si tu fais)

                    MAMAISON = new Adresse("...","...","...");
                    MAMAN = new Personne( MAMAISON);
                    PAPA = new Personne( MAMAISON);
                    
                    // MAINTENANT MAMAN ET PAPA DIVORCE PAPA DEMENAGE :
                    PAPA.getAdresse().setAdresse("nouvel adresse","...","..."); // PAPA DÉMÉNAGE
                    // PAR LA MEME OCCASION MAMAN A DÉMÉNAGER AUSSI 
                    
                    System.out.println(MAMAN.getAdresse());
                    System.out.println(PAPA.getAdresse());
                    // ce seront les 2 mêmes adresses ....
                    



                    pourquoi ?
                    parce que tu as donné le même objet "Adresse" à papa et maman .... papa et maman pointes donc vers le même objet :p si tu modifie l'adresse de papa tu modifie aussi celle de maman :p

                    donc tu dois cloner ton objet adresse pour chaque personnes :p
                    sauf si ça t'arrange bien que tt une famille et le même objet adresse (si ils déménages tous ensemble)
                    dans ce cas la, il suffit de faire une fonction qui en fonction du cas (tt la famille ou juste 1 )
                    créé un nouvel objet Adresse ou bien modifie l'ancien




                    OUBLIE PAS DE MARQUER LE PROBLÈME COMME RESOLUT
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Explications appel de méthode

                    × 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