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

43

В Java, когда интерфейс расширяет другой интерфейс:

Why does it implement its methods? How can it implement its methods when an interface can't contain a method body How can it implement the methods when it extends the other interface and not implement it? What is the purpose of an interface implementing another interface?

Это имеет основные понятия в Java!

EDIT:

<code>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();
}
</code>

In eclipse there is the implement sign besides the implemented methods in DragController.

And when I mouse-hover it, it says that it implements the method!!!

Я не получаю понижение. , , GingerHead
когда вы расширяете интерфейс, вы можете только добавить к нему, вот почему вы делаете это. Интерфейсы не реализуют методы. Peter Lawrey

Ваш Ответ

3   ответа
7

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

В вашем примере вы повторяете методы из суперинтерфейса. Хотя это и законно, но это не нужно и ничего не меняет в конечном результате. Скомпилированный код будетexactly the same есть ли эти методы или нет. Все, что говорит "Затмение", не имеет отношения к основной истине,an interface does not implement anything.

20

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

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

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

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

Я бы описал это как небольшую ошибку Eclipse. Нет смысла перераспределять методы в интерфейсе DragController, кроме случаев, когда вы хотите предоставить дополнительный javadoc.
Я ответил на них. Три первых вопроса не имеют смысла, поскольку интерфейс не реализует другой интерфейс и не содержит никакой реализации метода. На четвертый отвечает мой ответ: он позволяет предоставить дополнительное поведение / методы.
60

when an interface can't contain method body? How can it implement the methods when it extends the other interface and not implement it? What is the purpose of an interface implementing another interface?

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

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

и самолет:

public interface IAirplane extends IVehicle {
  bool moveDown(int x);
  bool moveUp(int x);
};
расширение библиотеки отличается от написания приложения с нуля
& quot; В любом случае при разработке программного обеспечения интерфейс обнаруживается после разработки конкретных классов. & quot; неправда. Примеры COM в C ++. Чтобы реализовать новый класс, вы должны реализовать уже существующий интерфейс. Ява это та же история. Возьмите любую библиотеку OO и попробуйте расширить ее, у вас сначала будут интерфейсы ...
я не понял тебя, когда ты сказал:interface in this case is designed before the classes. В любом случае при разработке программного обеспечения интерфейс обнаруживается после разработки конкретных классов.
@overexchange никакой интерфейс в этом случае не предназначен перед классами. Интерфейс описывает функциональность, однако классы представляют объекты реального мира. Это главное различие между классами и взаимодействиями. Нет относительно moveUp moveDown и так далее. Любое транспортное средство может двигаться вперед и назад, однако не все из них могут двигаться вверх и вниз. Самолеты могут двигаться вперед, а также вверх и вниз, но разные типы самолетов будут делать это по-разному.
Итак, вы в основном накапливаете методы в одном месте, называемомIAirplane и ты на самом деле не наследуешь. Еще один момент, я бы спросил автораIVehicle понять, почему этот интерфейсIvehicle не был разработан, чтобы уже рассмотретьmoveDown() а такжеmoveBack(), так какinterface обнаружен из существующего набора конкретных классов (я предполагаю, что концепция самолета доступна как часть его поколения). В целом, я чувствую, расширение интерфейса является следствием существующего плохого дизайна, потому что мы ломаем цельextends в этом сценарии.

Похожие вопросы