30 kwietnia 2008

SCJP - Implementacja interfejsu

Tym razem to właściwie tylko małe uzupełnienie w kwestii implementacji interfejsów. Uzupełnienie tego, z czym od dłuższego czasu się zmagam a co rozpocząłem artykułem "Przygotowania do SCJP czas zacząć".

Było już o tym, że jeśli klasa implementująca interfejs nie jest abstrakcyjna to musi implementować wszystkie zadeklarowane metody nie zaimplementowane jeszcze przez abstrakcyjne nadklasy. Wreszcie było też o tym, że klasa może implementować wiele interfejsów, choć rozszerzać może tylko jedną klasę, ale nie było o jednym – co to właściwie znaczy zaimplementować metody zadeklarowane w interfejsie, inaczej: jak dokładnie musi wyglądać metoda implementująca tą zadeklarowaną w interfejsie? Zacznijmy od przykładu.

interface SomeInf {
Number doSomething() throws Exception;
}

class SomeClass implements SomeInf {
public Integer doSomething() {
return 1;
}
}

Czy powyższy kod jest poprawny? Tzn. czy metoda doSomething() z klasy SomeClass rzeczywiście implementuje tą zadeklarowaną w interfejsie? Tak, kod ten jest poprawny, albowiem sygnatury nie muszą być identyczne, wystarczy, że są zgodne. Jakby się nad tym dłużej zastanowić, to można by dojść do wniosku, że implementacja metody to jakby jej nadpisanie (ang. overriding), tzn. nadpisanie metody nie posiadającej implementacji, metodą z implementacją. I ma to jakiś sens, jako że w obu tych przypadkach obowiązują dokładnie te same zasady. Metody implementujące interfejsy obowiązują dokładnie te same zasady, co metody nadpisujące metody z nadklasy i są one szczegółowo opisane w artykule "SCJP - Redefiniowanie metod".

Brak komentarzy: