0

Интерфейс расширяет другой интерфейс, но реализует его методы

11

Описание проблемы:

В Java, когда интерфейс расширяет другой интерфейс, у меня возникли несколько вопросов:

  1. Почему интерфейс "реализует" свои методы?
  2. Как он может "реализовать" свои методы, если интерфейс не может содержать тело метода?
  3. Как он может реализовать методы, если он просто расширяет другой интерфейс, а не реализует его?
  4. Какова цель интерфейса, который реализует другой интерфейс?

Это важные концепции в 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();
}

В Eclipse рядом с реализуемыми методами в DragController есть знак "реализации".

И когда я навожу курсор, он говорит, что он реализует метод!!!

3 ответ(ов)

0

Интерфейс не реализует методы другого интерфейса, а только наследует их. Например, представим, что у вас есть интерфейс IVehicle с двумя методами moveForward и moveBack, но также нужно учитывать самолет, который является видом транспортного средства, но с дополнительными методами, такими как moveUp и moveDown. В итоге у вас получается:

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

А для самолета:

public interface IAirplane extends IVehicle {
  boolean moveDown(int x);
  boolean moveUp(int x);
}

Таким образом, интерфейс IAirplane наследует методы moveForward и moveBack из интерфейса IVehicle, но также добавляет свои специфические методы. Это позволяет создать гибкую иерархию интерфейсов, где общий интерфейс может быть расширен для более специализированных реализаций.

0

Интерфейс определяет поведение. Например, интерфейс Vehicle может определять метод move().

Автомобиль (Car) является типом транспортного средства, но обладает дополнительным поведением. Например, интерфейс Car может определять метод startEngine(). Поскольку автомобиль также является транспортным средством, интерфейс Car расширяет интерфейс Vehicle, и, следовательно, определяет два метода: move() (унаследованный) и startEngine().

Интерфейс Car не содержит реализации методов. Если вы создадите класс (например, Volkswagen), который реализует интерфейс Car, этот класс должен будет предоставить реализации для всех методов, определенных в интерфейсе: move() и startEngine().

Интерфейс не может реализовывать другие интерфейсы. Он может только их расширять.

0

ad 1. Он не реализует свои методы.

ad 4. Цель одного интерфейса расширить, а не реализовать другой, заключается в создании более специфического интерфейса. Например, SortedMap является интерфейсом, который расширяет Map. Клиент, который не заинтересован в аспектах сортировки, может работать с Map и обрабатывать все экземпляры, такие как TreeMap, который реализует SortedMap. В то же время, другой клиент, интересующийся аспектами сортировки, может использовать те же экземпляры через интерфейс SortedMap.

В вашем примере вы дублируете методы из суперинтерфейса. Хотя это и допустимо, это не требуется и не меняет конечного результата. Скомпилированный код будет точно таким же, независимо от того, есть эти методы или нет. То, что показывает всплывающее объяснение в Eclipse, не имеет значения по сравнению с основной истиной, что интерфейс ничего не реализует.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь