web-dev-qa-db-fra.com

Interface étend une autre interface mais implémente ses méthodes

Dans Java quand une interface étend une autre interface:

  1. Pourquoi met-il en œuvre ses méthodes?
  2. Comment peut-il implémenter ses méthodes lorsqu'une interface ne peut pas contenir un corps de méthode
  3. Comment peut-il implémenter les méthodes lorsqu'il étend l'autre interface sans l'implémenter?
  4. Quel est le but d'une interface implémentant une autre interface?

Cela a des concepts majeurs en Java!

EDIT:

public interface FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);
}


public interface DragController extends FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);

  void dragEnd();

  void dragMove();
}

Dans Eclipse, il y a le signe implémentation en plus des méthodes implémentées dans DragController.

Et quand je passe la souris dessus, il est écrit que la méthode est implémentée !!!

43
GingerHead

Pourquoi met-il en œuvre ses méthodes? Comment peut-il implémenter ses méthodes lorsqu'une interface ne peut pas contenir de corps de méthode? Comment peut-il implémenter les méthodes lorsqu'il étend l'autre interface sans l'implémenter? Quel est le but d'une interface implémentant une autre interface?

Interface n'implémente pas les méthodes d'une autre interface mais les étend simplement. Voici un exemple d’extension d’interface: considérez que vous avez une interface véhicule avec deux méthodes moveForward et moveBack, mais vous devez également incorporer l’appareil qui est un véhicule mais avec quelques méthodes d’ajout comme moveUp, moveDown donc vous avez:

public interface IVehicle {
  bool moveForward(int x);
  bool moveBack(int x);
};

et avion:

public interface IAirplane extends IVehicle {
  bool moveDown(int x);
  bool moveUp(int x);
};
65
AlexTheo

Une interface définit le comportement. Par exemple, une interface Vehicle peut définir la méthode move().

Une voiture est un véhicule, mais a un comportement supplémentaire. Par exemple, l'interface Car peut définir la méthode startEngine(). Puisqu'une voiture est aussi un véhicule, l'interface Car étend l'interface Vehicle et définit donc deux méthodes: move() (hérité) et startEngine() .

L'interface Car n'a aucune implémentation de méthode. Si vous créez une classe (Volkswagen) qui implémente Car, elle devra fournir des implémentations pour toutes les méthodes de son interface: move() et startEngine().

Une interface ne peut implémenter aucune autre interface. Il ne peut que l’étendre.

20
JB Nizet

ad 1. Il n'implémente pas ses méthodes.

ad 4. Le but d’une interface extension, sans en implémenter une autre, est de construire une interface plus spécifique. Par exemple, SortedMap est une interface qui étend Map. Un client non intéressé par le tri peut coder contre Map et gérer toutes les instances, par exemple, de TreeMap, qui implémente SortedMap. En même temps, un autre client intéressé par l'aspect trié peut utiliser ces mêmes instances via l'interface SortedMap.

Dans votre exemple, vous répétez les méthodes de la superinterface. Bien que légal, il est inutile et ne change rien au résultat final. Le code compilé sera exactement le même que ces méthodes soient présentes ou non. Tout ce que dit le survol d'Eclipse est sans rapport avec la vérité de base selon laquelle une interface n'implémente rien .

7
Marko Topolnik