interfejs jest typem referencyjnym w Javie. Jest podobny do klasy. Jest to zbiór metod abstrakcyjnych. Klasa implementuje interfejs, dziedzicząc w ten sposób abstrakcyjne metody interfejsu.
oprócz metod abstrakcyjnych, interfejs może również zawierać stałe, metody domyślne, metody statyczne i typy zagnieżdżone. Ciała metod istnieją tylko dla metod domyślnych i metod statycznych.,
pisanie interfejsu jest podobne do pisania klasy. Ale klasa opisuje atrybuty i zachowania obiektu. Interfejs zawiera zachowania implementowane przez klasę.
O ile Klasa implementująca interfejs nie jest abstrakcyjna, wszystkie metody interfejsu muszą być zdefiniowane w klasie.
interfejs jest podobny do klasy w następujący sposób −
-
interfejs może zawierać dowolną liczbę metod.
-
interfejs jest zapisywany w pliku zrozszerzenie java, o nazwie interfejsu pasującej do nazwy pliku.,
-
kod bajtowy interfejsu pojawia się wplik klasowy.
-
Interfejsy pojawiają się w pakietach, a odpowiadający im plik kodu bajtowego musi znajdować się w strukturze katalogów zgodnej z nazwą pakietu.
jednak interfejs różni się od klasy na kilka sposobów, w tym −
-
nie można utworzyć instancji interfejsu.
-
interfejs nie zawiera żadnych konstruktorów.
-
wszystkie metody w interfejsie są abstrakcyjne.
-
interfejs nie może zawierać pól instancji., Jedyne pola, które mogą pojawić się w interfejsie, muszą być zadeklarowane zarówno jako statyczne, jak i końcowe.
-
interfejs nie jest rozszerzany przez klasę; jest implementowany przez klasę.
-
interfejs może rozszerzać wiele interfejsów.
deklarowanie interfejsów
słowo kluczowe interface służy do deklarowania interfejsu. Oto prosty przykład deklaracji interfejsu-
przykład
Poniżej znajduje się przykład interfejsu −
Interfejsy mają następujące właściwości −
-
interfejs jest domyślnie abstrakcyjny., Nie musisz używać słowa kluczowego abstract podczas deklarowania interfejsu.
-
każda metoda w interfejsie jest również domyślnie abstrakcyjna, więc słowo kluczowe abstract nie jest potrzebne.
-
metody w interfejsie są jawnie publiczne.
przykład
/* File name : Animal.java */interface Animal { public void eat(); public void travel();}
Implementowanie interfejsów
gdy klasa implementuje interfejs, można myśleć o klasie jako o podpisaniu umowy, wyrażającej zgodę na wykonywanie określonych zachowań interfejsu. Jeśli klasa nie wykonuje wszystkich zachowań interfejsu, klasa musi zadeklarować się jako abstrakcyjna.,
Klasa używa słowa kluczowego implements do implementacji interfejsu. Słowo kluczowe implements pojawia się w deklaracji klasy po części rozszerzonej deklaracji.
przykład
To da następujący wynik −
wyjście
Mammal eatsMammal travels
gdy nadpisuje metody zdefiniowane w interfejsach, należy przestrzegać kilku reguł −
-
zaznaczone wyjątki nie powinny być deklarowane dla metod implementacji innych niż te zadeklarowane przez metodę interfejsu lub podklasy tych zadeklarowanych przez metodę interfejsu.,
-
podpis metody interfejsu i ten sam typ lub Podtyp powrotu powinny być zachowane podczas nadpisywania metod.
-
sama klasa implementacyjna może być abstrakcyjna, a jeśli tak, metody interfejsu nie muszą być implementowane.
w przypadku interfejsów implementacyjnych istnieje kilka reguł −
-
klasa może zaimplementować więcej niż jeden interfejs na raz.
-
klasa może rozszerzyć tylko jedną klasę, ale zaimplementować wiele interfejsów.
-
interfejs może rozszerzyć inny interfejs, w podobny sposób jak klasa może rozszerzyć inną klasę.,
Rozszerzanie interfejsów
interfejs może rozszerzać inny interfejs w taki sam sposób, jak klasa może rozszerzać inną klasę. Słowo kluczowe extends jest używane do rozszerzenia interfejsu, a interfejs potomny dziedziczy metody interfejsu nadrzędnego.
poniższy interfejs sportowy jest rozszerzony o Interfejsy hokejowe i piłkarskie.
przykład
interfejs hokejowy ma cztery metody, ale dziedziczy dwie ze sportu; dlatego klasa, która implementuje Hokej, musi zaimplementować wszystkie sześć metod., Podobnie, klasa, która implementuje piłkę nożną, musi zdefiniować trzy metody Z Piłki Nożnej i dwie metody ze sportu.
Rozszerzanie wielu interfejsów
Klasa Java może rozszerzać tylko jedną klasę nadrzędną. Dziedziczenie wielokrotne nie jest dozwolone. Interfejsy nie są jednak klasami i interfejs może rozszerzyć więcej niż jeden interfejs nadrzędny.
słowo kluczowe extends jest używane raz, a Interfejsy nadrzędne są deklarowane na liście rozdzielonej przecinkami.,
na przykład, jeśli interfejs hokeja rozszerzył zarówno sporty, jak i Wydarzenia, zostanie zadeklarowany jako −
przykład
public interface Hockey extends Sports, Event
Interfejsy znacznikowe
najczęstsze użycie interfejsów rozszerzających występuje, gdy interfejs nadrzędny nie zawiera żadnych metod. Na przykład interfejs MouseListener w Javie.awt.pakiet zdarzeń Rozszerzony java.util.EventListener, który jest zdefiniowany jako –
przykład
package java.util;public interface EventListener{}
interfejs bez metod jest określany jako interfejs tagowania., Istnieją dwa podstawowe cele projektowe interfejsów tagowania −
tworzy wspólny rodzic − podobnie jak w przypadku interfejsu EventListener, który jest rozszerzony o dziesiątki innych interfejsów w Java API, można użyć interfejsu tagowania do stworzenia wspólnego rodzica wśród grupy interfejsów. Na przykład, gdy interfejs rozszerza EventListener, JVM wie, że ten konkretny interfejs będzie używany w scenariuszu delegowania zdarzeń.
dodaje typ danych do klasy − w tej sytuacji pochodzi termin, tagowanie., Klasa implementująca interfejs znakowania nie musi definiować żadnych metod (ponieważ interfejs nie ma żadnych), ale klasa staje się typem interfejsu poprzez polimorfizm.