Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interface

A quoi ça sert?

Sujet résolu
    29 octobre 2010 à 19:41:40

    Bonsoir,

    Désolé de poser cette question sûrement débile, mais elle me trotte dans la tête.
    Je ne vois vraiment pas à quoi sert une interface, si il faut redéfinir les méthodes, pourquoi créer une interface au lieu de créer les méthodes directement?
    Exemple :
    public interface Tours {
    
    public void direBonjour();
    public void direAurevoir();
    
    
    }
    


    public class Chien implements Tours{
    
    //...
    
    
    public void direBonjour{
    
       System.out.println("Ouaf! Ouaf! Bonjour!");
    
    
    }
    
    public void direAurevoir(){
    
       System.out.println("Ouaf! Ouaf! Aurevoir!");
    
    
    }
    


    A quoi le fait d'avoir implémenté l'interface a-til servi? J'aurais très bien pu faire pareil sans elle :euh:


    Merci d'avance,
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      29 octobre 2010 à 19:48:56

      parce qu'une interface est un contrat entre le createur et l'utilisateur de la méthode, ça dit: "je suis capable de faire ça" mais pas "comment je fais ça"

      tout l'intêret est de permettre d'utiliser un comportement sans l'avoir implémenté.

      Tu peux donc avoir une classe qui utilise des Tours mais qui ne connait pas l'existence des Chien, et ainsi remplacer Chien par ce que tu veux quand le besoin s'en fait sentir.
      • Partager sur Facebook
      • Partager sur Twitter
        29 octobre 2010 à 19:53:53

        Mais puisqu'il me faudra recopier les méthodes, c'est un peu inutile non?
        • Partager sur Facebook
        • Partager sur Twitter
          29 octobre 2010 à 20:33:20

          Les interfaces permettent aussi de créer des "supertypes".

          Exemple:

          public interface InterfaceA
          {
               public void methode();
          }
          
          public class ImplementationA implements InterfaceA
          {
               @Override
               public void methode(){}
          }
          
          public class ImplementationB implements InterfaceA
          {
               @Override
               public void methode(){}
          }
          
          public static void main(String[] args)
          {
               InterfaceA objA = new ImplementationA();
               InterfaceA objB = new ImplementationB();//Et oui ça fonctionne
          }
          



          Tu comprendras que ça peut être utile parfois.
          • Partager sur Facebook
          • Partager sur Twitter
            29 octobre 2010 à 20:36:52

            Mouais... Je comprends comment ça marche mais j'en vois toujours pas l'utilité :(

            Merci
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              29 octobre 2010 à 21:00:49

              je développe un jeu client serveur, une unité peut se déplacer:

              -une classe qui implémente l'algo de déplacement et qui contient une interface:

              public final class Fly extends MoveBehavior {
              
              private BehaviorImplementor behaviorImplementor;
              
              move() {
              ...
              if (v <= distance) {
                  this.behaviorImplementor.translate(v);
              }
              ...
              }
              }
              


              suivant que ce code soit appelé sur le client ou sur le server, le BehaviorImplementor sera différent:
              dans le serveur: du code java classique qui va faire le calcul de translation.
              dans le client: du code JNI qui va appeler une méthode du moteur graphique écrit en C++.

              Comme tu vois les 2 implémentation font les choses très différement, cependant, pour la classe Fly, elle n'a pas à s'en préoccuper, elle demande juste une translation et se fiche de savoir comment l'implémentation concrete va le faire.
              • Partager sur Facebook
              • Partager sur Twitter
                29 octobre 2010 à 21:08:57

                Euh excuse moi mais j'ai strictement rien compris
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  29 octobre 2010 à 22:18:17

                  pour faire simple l'interface dit qu'il est possible de faire une action, sans dire comment, ensuite on peut utiliser différente manière de réaliser cette action sans que l'objet qui utilise l'interface n'aie a se préocupper de comment elle est implémentée.

                  si t'en vois pas l'utilité, ne t'en sert pas, quand tu sera confronté à un problème qu'on ne peut résoudre sans ça, tu comprendras mieux.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 octobre 2010 à 22:19:30

                    Je commence un peu à comprendre.
                    Merci pour le temps que tu as pris :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Interface

                    × 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