Java – interfejsy po raz pierwszy

Cześć,
dziś będzie wpis bardziej techniczny.
Ze względu na to, że przygotowuję się do zdawania certyfikatów z Javy 8 postanowiłam zamieszczać tutaj informacje na które natrafiłam podczas nauki i które uważam za wartościowe.

Na początek kilka słów o zmianie wprowadzonej w Javie 8, która dotyczy interfejsów.
Od Javy 8 poza deklaracjami metod, które mogą zostać umieszczone w interfejsie mamy możliwość skorzystania z 2 innych rodzajów metod:

*domyślnych – metody rozpoczynające się od słowa kluczowego default. Są to metody, które poza deklaracją mają również określoną w interfejsie definicję. Klasy implementujące interfejs mogą nadpisać implementację dostarczoną przez interfejs, ale nie muszą. Metody domyślne są metodami instancyjnymi.
Zostały  one dodane głównie ze względu na wprowadzenie do Javy 8 streamów i lambd,  aby zapewnić wsteczną kompatybilność interfejsów.

*statycznych – metody oznaczone słowem kluczowym static. Podobnie jak w przypadku klas są one powiązane z interfejsem, a nie z konkretną instancją. Nie mogą one odwoływać się do zmiennych niestatycznych.
Metody statyczne zostały dodane, aby ułatwić tworzenie metod bibliotecznych. Metod statycznych nie można nadpisać.

Przykładem interfejsu z metodą statyczną i domyślną jest poniższy kod:

public interface MessagePrinting {

    String interfaceMessage = "static interface message";

    default void printMessage() {
        System.out.println("default message from interface");
    }

    static void printStaticMessage() {
        System.out.println(interfaceMessage);
    }
}

Możemy zaimplementować powyższy interfejs w klasach:

public class MessagePrintingImpl implements MessagePrinting {
    //here we not override method to see default result
}

oraz

public class MessagePrintingOverrideDefault implements MessagePrinting {

    @Override
    public void printMessage() {
        System.out.println("Overrided default message");
    }
}

 

wtedy klasa testowa:

public class TestClass {
    public static void main(String[] args) {
        MessagePrinting messagePrintingImpl=new MessagePrintingImpl();
        MessagePrinting messagePrintingOverrideDefault
                                =new MessagePrintingOverrideDefault();
        System.out.println("Print message from implementation:");
        messagePrintingImpl.printMessage();
        System.out.println("Message print from static method:");
        MessagePrinting.printStaticMessage();
        System.out.println("Message print from overrided method:");
        messagePrintingOverrideDefault.printMessage();
    }
}

daje rezultat:

Print message from implementation:
default message from interface
Message print from static method:
static interface message
Message print from overrided method:
Overrided default message

Mam nadzieję, że dla kogoś z Was ten post okaże się przydatny oraz, że zwrócicie większą uwagę na nowe interfejsy w Javie 8 (zwłaszcza jeśli do tej pory je ignorowaliście).

Do kolejnego posta:)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *