[ Pobierz całość w formacie PDF ]
Wewn trz deklaracji interfejsu mog pojawi si zmienne. S one jednak niejawnie ustawiane
na zmienne typu final i static, co oznacza, e nie mog zosta zmienione przez implementu-
j c je klas . Co wi cej, w trakcie ich deklarowania trzeba je zainicjalizowa sta . Dla wszyst-
kich metod i zmiennych niejawnie jest stosowany modyfikator dost pu public.
Poni ej znajduje si przyk ad definicji interfejsu. Deklaruje on prosty interfejs, który zawiera
jedn metod o nazwie callback() przyjmuj c jeden parametr typu int.
interface Callback {
void callback(int param);
}
Implementacja interfejsu
Raz zdefiniowany interfejs mo e by implementowany przez wiele klas. Aby zaimplemento-
wa interfejs, trzeba doda do klasy klauzul implements oraz doda wszystkie metody zdefi-
niowane w interfejsie. Ogólna posta klasy wykorzystuj cej interfejsy jest nast puj ca.
dost p class nazwaklasy [extends klasa-bazowa]
[implements interfejs[, interfejs...]] {
// cia o klasy
}
Je li klasa implementuje wiele interfejsów, ich nazwy oddziela si przecinkami. Je eli dwa
implementowane interfejsy deklaruj t sam metod , metoda ta b dzie stosowana przez klientów
obu tych interfejsów. Metody implementuj ce interfejs musz by metodami publicznymi.
Co wi cej, sygnatura typów implementowanej metody i jej deklaracji z interfejsu musi by
taka sama.
Oto krótki przyk ad klasy implementuj cej zdefiniowany wcze niej interfejs Callback.
Poleć książkę
Kup książkę
230 Cz I J zyk Java
class Client implements Callback {
// implementuje interfejs Callback
public void callback(int p) {
System.out.println("wywo anie callback() z warto ci " + p);
}
}
Zauwa , e metoda callback() zosta a zadeklarowana z modyfikatorem public.
Implementowane metody publiczne musz by deklarowane jako publiczne (z modyfikatorem
public).
W pe ni poprawne jest umieszczanie w klasie implementuj cej interfejs dodatkowych sk a-
dowych, na przyk ad metod. Poni sza wersja klasy Client nie tylko implementuje metod
callback(), ale te dodaje w asn metod nonIfaceMeth().
class Client implements Callback {
// implementuje interfejs Callback
public void callback(int p) {
System.out.println("wywo anie callback() z warto ci " + p);
}
void nonIfaceMeth() {
System.out.println("Klasa implementuj ca interfejs " +
"mo e zawiera tak e w asne metody.");
}
}
Dost p do implementacji za po rednictwem referencji do interfejsu
Zmienne reprezentuj ce referencje do obiektów mo na deklarowa przy u yciu interfejsów
(zamiast odpowiednich typów klasowych). Takiej zmiennej mo na przypisa egzemplarz
dowolnej klasy implementuj cej zadeklarowany interfejs. Wywo anie metody dla takiej referencji
spowoduje wywo anie odpowiedniej wersji metody nale cej do w a ciwego egzemplarza klasy.
Jest to bardzo wa ny aspekt interfejsów. Metoda do wykonania jest wyszukiwana dynamicznie
w trakcie dzia ania programu, co oznacza, i klasy mo na tworzy pó niej ni wywo uj cy je
kod. Kod korzystaj cy z metod interfejsu nie musi dysponowa adn wiedz o obiekcie, którego
b dzie dotyczy o to wywo anie. Ca a idea wywo a metod interfejsu jest bardzo podobna do
wywo a metod przes oni tych w podklasach klasy bazowej (patrz poprzedni rozdzia ).
Poniewa dynamiczne wyszukiwanie metody do wykonania wi e si ze znacznymi kosztami
w porównaniu z tradycyjnymi wywo aniami metody w Javie, nale y unika stosowania inter-
fejsów w kodzie, który ma zapewnia przede wszystkim wysok wydajno .
Nast puj cy kod wywo uje metod callback() przy u yciu zmiennej referencyjnej interfejsu.
class TestIface {
public static void main(String args[]) {
Callback c = new Client();
c.callback(42);
}
}
Poleć książkę
Kup książkę
Rozdzia 9. Pakiety i interfejsy 231
Wynik dzia ania programu jest nast puj cy.
wywo anie callback() z warto ci 42
Zauwa , e zmienna c jest typu Callback, a mimo to zosta jej przypisany obiekt typu Client.
Za po rednictwem zmiennej c mo na wywo a tylko metod callback() nie mo na jej
u y do uzyskania dost pu do pozosta ych sk adowych klasy Client. Innymi s owy, zmienna
referencyjna interfejsu wie tylko o metodach, które pojawi y si w deklaracji interfejsu. Z tego
wzgl du zmiennej c nie uda si wywo a metody nonIfaceMeth(), gdy zosta a ona zdefinio-
wana w klasie Client, ale nie w interfejsie Callback.
Powy szy przyk ad ilustruje co prawda sk adni korzystania ze zmiennej referencyjnej, której
typ wskazuje interfejs (nie klas ), ale nie demonstruje pe nego potencja u tego rodzaju referencji
[ Pobierz całość w formacie PDF ]