Partage
  • Partager sur Facebook
  • Partager sur Twitter

Accès aux méthodes d'un objet depuis un ArrayList

Interface

Sujet résolu
    2 septembre 2019 à 13:08:25

    Bonjour,

    J'ai un ArrayList d'objets de type <Option>

    List<Option> options = new ArrayList<Option>();

    Option est une interface avec une seule méthode à redéfinir "getPrix()" qui indique le prix de l'option.

    J'ai créé différents objets qui héritent de cette interface : new GPS(), new SiegeChauffant(), etc... dans lesquels j'ai une méthode toString() et un constructeur en plus de la méthode getPrix() que je suis obligée de redéfinir.

    J'ai ajouté ces objets à mon ArrayList d'options.

    Pourquoi je n'arrive pas à accéder qu'à la méthode de l'interface et pas des objets ? Si je fais un forEach :

    for (Option option : options){
           System.out.println(option.getPrix())
    }

    Ca fonctionne bien parce que getPrix() est dans mon interface option. Par contre le code suivant ne fonctionne pas, je ne comprends pas pourquoi ?

    for (Option option : options){
           System.out.println(option.GPS()) //appel au constructeur de l'objet
    }








    -
    Edité par chpe1 2 septembre 2019 à 13:09:33

    • Partager sur Facebook
    • Partager sur Twitter
      2 septembre 2019 à 14:29:24

      Le constructeur de ton GPS a déjà été appelé quand tu as écrit :
      new GPS();

      Tu ne peux pas l'exécuter une seconde fois sur le même objet : un constructeur s'exécute uniquement à la création de l'objet, ça n'a pas de sens de l'exécuter après. Par contre tu peux créer un autre GPS si tu veux, ça exécutera à nouveau le constructeur mais seulement sur le nouvel objet créé, pas sur l'objet que tu as déjà mis dans ta liste.

      Qu'est-ce que tu voulais faire exactement ?



      • Partager sur Facebook
      • Partager sur Twitter
        2 septembre 2019 à 14:35:08

        Je voulais avoir le nom de l'option.

        Le constructeur de cette option exécute la fonction private nom() qui retourne un String avec le nom de l'option.

        Je souhaitais afficher ce nom.

        public GPS() { // constructeur
        nom();
        }
        
        private String nom (){
        return "GPS";
        }



        -
        Edité par chpe1 2 septembre 2019 à 14:35:24

        • Partager sur Facebook
        • Partager sur Twitter
          2 septembre 2019 à 15:45:17

          Tu pourrais déclarer une méthode nom() dans l'interface Option.
          Comme ça tu peux l'appeler sans savoir quel est le type de l'Option, et elle te renvoie son nom.

          Mais bon, sache que la méthode toString() est exactement faite pour ça...
          Pour tester le programme, je pense que tu peux utiliser toString() même si elle te donne trop de détail. Je ne crois pas que tu aies besoin du nom de l'option seul pour cette activité (mais ça fait un moment que je l'ai faite, j'ai peut-être oublié) ?

          • Partager sur Facebook
          • Partager sur Twitter
            7 septembre 2019 à 19:01:54

            Merci pour ta réponse. Effectivement la solution passe par l'utilisation de la fonction toString. Ou alors il faut déclarer la fonction nom() en public comme ça on y a accès.

            Merci pour ton aide 

            • Partager sur Facebook
            • Partager sur Twitter

            Accès aux méthodes d'un objet depuis un ArrayList

            × 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