Partage
  • Partager sur Facebook
  • Partager sur Twitter

implements vs extends

    17 février 2009 à 16:38:16

    Bonjour, je voulais savoir la différence entre l'implémentation et l'héritage?
    • Partager sur Facebook
    • Partager sur Twitter
      17 février 2009 à 16:53:59

      Bonjour
      L'implémentation s'utilise d'une classe vers une (ou plusieurs) interface.
      L'héritage, c'est d'une classe (resp. interface) vers UNE autre classe (resp. vers 1 ou plusieurs interfaces).
      • Partager sur Facebook
      • Partager sur Twitter
        17 février 2009 à 17:07:41

        Ok, mais en gros c'est la même chose à part les noms...justement je vois pas la différence entre l'utilisation d'une interface et celle d'une autre classe mis à part que l'interface se doit d'avoir toutes ses méthodes abstraites...
        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2009 à 17:17:19

          Une interface définit uniquement le comportement que doit suivre ta classe d'implémentation. Exemple vu dans un autre topic : avec les animaux, ils ont tous la capacité de respirer, mais l'interface ne dit pas comment faire.

          Alors qu'en général, une super classe définit ses méthodes (sauf lors du cas d'une méthode abstraite).

          Des infos ici : (premier lien avec google) http://www2.lifl.fr/~bogaert/clfc/polyDurif/node40.html
          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2009 à 17:21:19

            Grossièrement : une interface permet de regrouper plusieurs classes sous un même nom.

            Ex :
            interface vehicule
            Attributs : poids, hauteur, largeur, longueur
            Méthodes : String getTypeVehicule()

            classe avion implements vehicule
            Attributs : poids, hauteur, largeur, longueur + éventuellement d'autres attributs
            Méthodes : getTypeVehicule() { return "aérien";} + éventuellement d'autres méthodes

            classe voiture implements vehicule
            Attributs : poids, hauteur, largeur, longueur + éventuellement d'autres attributs
            Méthodes : getTypeVehicule() { return "terrestre";} + éventuellement d'autres méthodes


            L'avantage et que je sais que pour n'importe quel véhicule, les attributs poids, hauteur, largeur, longueur ainsi que la méthode getTypeVehicule sont obligatoirement définis.

            Imaginons un fonction permettant de savoir si le véhicule est capable d'effectuer la course :
            boolean couseTerrestre(vehicule monvehicule) { 
                return (monvehicule.getTypeVehicule().equalsIgnoreCase("Terrestre");
            }
            


            EDIT :
            et donc tu peux avoir au final :
            Avion monAvion = new Avion();
            Voiture maVoiture = new Voiture();
            courseTerrestre(monAvion); //renvoi false
            courseTerrestre(maVoiture); // renvoi true
            

            Les 2 appels sont bon car ce sont tous les 2 des véhicules.
            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2009 à 17:28:57

              Les thermes sont un peu dur à comprendre mais ça m'a un peu aidé, je verrais un peu mieux en programmant...vous ne connaissez pas des sites avec des exo de java corrigés? que je puisse m'entraîner.
              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2009 à 17:35:01

                Citation : Mric_

                Grossièrement : une interface permet de regrouper plusieurs classes sous un même nom.


                Tu parles de polymorphisme ? c'est tout aussi possible avec les classes abstraites.

                Citation : Mric_

                L'avantage et que je sais que pour n'importe quel véhicule, les attributs poids, hauteur, largeur, longueur [...] sont obligatoirement définis.


                Heu... par attribut tu entends champs d'instances ?
                Les interface ne peuvent pas en contenir.

                Une classe Vehicule est l'exemple typique d'une classe abstraite, utiliser une interface me semble assez peu adaptée.
                • Partager sur Facebook
                • Partager sur Twitter
                  18 février 2009 à 9:34:58

                  Heu ouai je me suis un peu emballé en effet ... j'ai mélangé les 2 :(

                  Dans les 2 cas :
                  Elles ne peuvent pas être instancié.

                  Interface :
                  Elle ne peut pas avoir de constructeur.
                  Les attributs sont uniquement public, final ou static et obligatoirement initialisés.
                  Les méthodes ne sont pas implémenté (elle doivent obligatoirement toute être redéfini)

                  Classe abstraite :
                  Elle peut avoir une constructeur (appelé par la classe fille).
                  Les attributs peuvent être de n'importe quel type.
                  Les méthodes peuvent être implémenté ou non implémenté (abstract).

                  La grande différence réside dans l'utilisation des 2.
                  Une interface est faite pour utiliser un module sans savoir le code dernière (c'est le principe, même si tu peux faire pareil avec une classe abstraite).

                  Et la grande différence (et c'est la que l'interface à plus d'intérêt que la classe abstraite), c'est que en Java il n'existe pas d'héritage multiple, mais une classe peut implémenter plusieurs interface.

                  En gros :

                  Interface vehicule
                  Interface objet
                  Classe abstraite vehicule
                  Classe abstraite objet
                  Classe voiture

                  Une voiture implémente l'interface véhicule ET l'interface objet
                  Une voiture ne peux pas hérité de la classe abstraite vehicule ET de la classe abstraite objet

                  Partant de ce principe, une interface est plus "propre" qu'une classe abstraite, même si ça reste un point propre à la programmation de chacun).

                  J'espère m'être moins embrouillé cette fois ci.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 février 2009 à 10:00:00

                    Oui, c'est assez clair, mais alors du coup je me demande, quel est l'intérêt de la classe abstraite?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 février 2009 à 10:26:25

                      Ben tu peux mettre en commun des méthodes pour plusieurs classes au lieu de les redéfinir à chaque fois si tu utilise une interface.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 février 2009 à 10:28:37

                        Ah d'accord, pas faux ok merci beaucoup!!
                        • Partager sur Facebook
                        • Partager sur Twitter

                        implements vs extends

                        × 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