Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode absraite

    8 novembre 2008 à 17:02:32

    Bonjour à tous :)

    Voilà je débute en Java, et j'aimerai savoir s'il était possible de déclarer une méthode abstraite dans une classe mère avec des arguments ? Ceux-ci peuvent-il être différent (en nombre ou en type) que dans la méthode redéclaré dans les classes filles ?

    Merci d'avance pour votre aide !
    • Partager sur Facebook
    • Partager sur Twitter
      8 novembre 2008 à 18:55:43

      Bonsoir
      Si tu définis une méthode abstraite, il faut absolument définir la classe comme abstraite.
      Et oui, elle peut avoir des arguments différents (en type ou en nombre).
      Par contre, il faut redéclarer cette fonction avec la même signature dans les classes filles.
      • Partager sur Facebook
      • Partager sur Twitter
        8 novembre 2008 à 19:08:17

        Qu'entendez-vous par "signature" ?
        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2008 à 19:23:23

          La signature de cette methode :
          public void t(int a, double b)
          


          est ==> t(int,double)
          En fait, c'est le nom de la méthode + les types des paramètres.
          • Partager sur Facebook
          • Partager sur Twitter
            8 novembre 2008 à 19:27:09

            Dans ce cas là, comment peut-elle avoir des arguments différents? Il y aura obligatoirement les même arguments dans les sous-classes non ?

            Je vous explique mon problème :
            J'ai un tableau d'objet de trois classes différentes mais dérivées de la même classe. Je dois parcourir le tableau et appliquer une méthode, "réserver", à chacun des objets. Cependant, cette méthode n'est pas appelé avec les même arguments dans les trois classes. Comment faire ?
            • Partager sur Facebook
            • Partager sur Twitter
              9 novembre 2008 à 10:57:18

              Peut-on surcharger une méthode abstraite ?
              Ou faut-il que je la déclare avec le maximum d'arguments dans la classe abstraites,quitte à ne pas les utiliser tous dans les classes filles ?

              Merci d'avance !
              • Partager sur Facebook
              • Partager sur Twitter
                9 novembre 2008 à 11:19:30

                Je serais toi je déclarerai cette méthode comme abstraite dans la classe mère, sans argument. J'implémenterai dans chaque classe fille cette méthode, puis la surchargerai avec le nombre et le type d'arguments spécifiques à chaque classe fille. Donc 2 méthodes reserver dans chaque classe fille, dont une qui implémente celle de la classe mère.

                Cependant je ne suis pas très réveillé il y a surement une meilleure solution...
                • Partager sur Facebook
                • Partager sur Twitter
                  9 novembre 2008 à 12:11:12

                  Quand vous dites : "J'implémenterai dans chaque classe fille cette méthode", je met quoi dans le corps de cette méthode sans arguments ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    9 novembre 2008 à 12:55:59

                    Je pense que la solution la plus intéressante dans ce genre de cas est de définir la méthode concrète dans une classe abstraite, celle ci contenant le code commun à toutes les méthodes surchargées, puis appeler cette méthode dans les surcharges:
                    public abstract class Parent {
                       protected void myMethod() {
                          ...
                       }
                    }
                    
                    public class Child extends Parent {
                       public void myMethod(int value) {
                          myMethod();
                          ...
                       }
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 novembre 2008 à 14:02:39

                      En faite il y a quelque chose que je comprend pas...
                      Dans ma classe mère j'ai déclaré une méthode Afficher(), que j'ai redéclarer dans toutes les classes dérivés avec un super.Afficher
                      Quand je parcours le tableau, et que je fais un simple tab[i].Afficher, il utilise la méthode Afficher de la classe correspondante.Pourquoi n'ai-je pas à lui indiquer la méthode de quelle classe afficher avec un transtypage ?

                      Quand j'essaye la méthode citée au message précédent, et que je fais Tab[i].myMethod(int) avec un tableau de Parent, il me dit que myMethod ne peux être appelé avec un (int), et je suis alors obligé de faire ((Child)Tab[i]).myMethod(int).

                      Pourquoi dans un cas il applique la méthode de la bonne classe sans avoir à lui indiquer, et pas dan l'autre cas ?

                      J'espère avoir été assez clair..
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        9 novembre 2008 à 19:46:25

                        C'est tout a fait normal, ton tab[i] contient des Parent, donc tu ne peux appeler les méthodes de Child sans down cast.

                        Si tu veux pouvoir le faire, il faut définir myMethod(int) dans Parent et l'implémenter dans tous les Child.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Méthode absraite

                        × 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