Интерфейс расширяет другой интерфейс, но реализует его методы
В java, когда интерфейс расширяет другой интерфейс:
- Почему он реализует свои методы?
- Как он может реализовать свои методы, когда интерфейс не может содержать
метод тела
- Как реализовать методы, когда он расширяет другой интерфейс
и не реализовать его?
- Какова цель интерфейса, реализующего другой интерфейс?
Это основные понятия в 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
.
И когда я наводил его мышью, он говорит, что он реализует метод!!!
Ответы
Ответ 1
Почему он реализует свои методы? Как он может реализовать свои методы когда интерфейс не может содержать тело метода? Как он может реализовать методы, когда он расширяет другой интерфейс и не реализует его? Какие является целью интерфейса, реализующего другой интерфейс?
Интерфейс не реализует методы другого интерфейса, а просто расширяет их.
Одним из примеров, когда требуется расширение интерфейса, является: считайте, что у вас есть интерфейс транспортного средства с двумя способами moveForward
и moveBack
, но также вам необходимо включить Aircraft, который является транспортным средством, но с некоторыми дополнительными методами, такими как moveUp
, moveDown
so
в конце концов у вас есть:
public interface IVehicle {
bool moveForward(int x);
bool moveBack(int x);
};
и самолет:
public interface IAirplane extends IVehicle {
bool moveDown(int x);
bool moveUp(int x);
};
Ответ 2
Интерфейс определяет поведение. Например, интерфейс Vehicle
может определять метод move()
.
Автомобиль - это транспортное средство, но имеет дополнительное поведение. Например, интерфейс Car
может определять метод startEngine()
. Поскольку Car также является транспортным средством, интерфейс Car
расширяет интерфейс Vehicle
и таким образом определяет два метода: move()
(унаследовано) и startEngine()
.
Интерфейс Car не имеет никакой реализации метода. Если вы создадите класс (Volkswagen), который реализует Car, он должен будет обеспечить реализацию для всех методов своего интерфейса: move()
и startEngine()
.
Интерфейс может не реализовывать какой-либо другой интерфейс. Он может только расширить его.
Ответ 3
ad 1. Он не реализует свои методы.
ad 4. Назначение одного интерфейса , расширяющего, а не другого, заключается в создании более конкретного интерфейса. Например, SortedMap
- это интерфейс, который расширяет Map
. Клиент, не заинтересованный в аспекте сортировки, может кодировать Map
и обрабатывать все экземпляры, например, TreeMap
, который реализует SortedMap
. В то же время другой клиент, заинтересованный в отсортированном аспекте, может использовать те же экземпляры через интерфейс SortedMap
.
В вашем примере вы повторяете методы из суперинтерфейса. Хотя он юридический, он не нужен и ничего не меняет в конечном результате. Скомпилированный код будет точно таким же, существуют ли эти методы или нет. Независимо от того, что говорит наводнение Eclipse, он не имеет отношения к основной истине, что интерфейс ничего не реализует.