Java Interfejs

Odpowiedz Nowy wątek
2018-02-02 21:46
0

Witam, zdaje sobie sprawę, że to pytanie pojawiało się tutaj już kilka razy, ale potrzebuje prostej, łopatologicznej odpowiedzi na pytania: Czym sa interfejsy, jak je rozumiem, do czego są i jak są stosowane ?

Pozostało 580 znaków

2018-02-02 22:18
1

Interfejsy to po prostu zbiór deklaracji, co klasa implementująca ów interfejs musi zawierać.

Stosuje je się praktycznie wszędzie do wydzielania wspólnej warstwy abstrakcji. Przykład:
Bez interfejsów:

class IntValueClassA {
    int getValue(){
        return -1;
    }
}

class IntValueClassB {
    int getValue(){
        return 1;
    }
}

public int sumValues(IntValueClassA a, IntValueClassB b){
    return a.getValue() + b.getValue();
}

public void test(){
    IntValueClassA a = new IntValueClassA();
    IntValueClassB b = new IntValueClassB();

    sumValues(a, b); // zadziała
    sumValues(a, a); // błąd kompilacji - bo a jest innej klasy niż IntValueClassB
    sumValues(b, a); // błąd kompilacji
    sumValues(b, b); // błąd kompilacji
}

Żeby to ogarnąć to trzeba by dopisać jeszcze trzy razy sumValues - dla (IntValueClassA, IntValueClassA), (IntValueClassB, IntValueClassB) itp. A co jeśli dorzucisz IntValueClassC?

Teraz z interfejsami:

interface IntValue {
    int getValue();
}
class IntValueClassA implements IntValue {
    int getValue(){
        return -1;
    }
}

class IntValueClassB implements IntValue {
    int getValue(){
        return 1;
    }
}

public int sumValues(IntValue a, IntValue b){
    return a.getValue() + b.getValue();
}

public void test(){
    IntValueClassA a = new IntValueClassA();
    IntValueClassB b = new IntValueClassB();

    sumValues(a, b); // zadziała
    sumValues(a, a); // zadziała
    sumValues(b, a); // zadziała
    sumValues(b, b); // zadziała
}

I kiedy chcesz dorzucić jeszcze jedną klasę IntValueClassC to po prostu implementujesz IntValue i działa.

Oczywiście to jest dosyć prosty przykład.

W sumie ciekawi mnie, też do końca nie ogarniam tych interfejsów. Dlaczego w pierwsyzm przypadku to nie działa, a w drugim tak? - jajko1233 2018-02-03 00:27
Spójrz na typy przyjmowane przez sumValues. W pierwszym przypadku są to IntValueClassA i IntValueClassB, w drugim IntValue. - wartek01 2018-02-03 10:34
Ciekawe :D Dzięki za wyjaśnienie :P - jajko1233 2018-02-03 10:36

Pozostało 580 znaków

2018-02-02 22:25
1

Warto zajrzeć do książki Effective Java 2nd edition (rozdział 4 classes and interfaces).

Poczytaj o:

  • interfejsach markerach (np. czy dana klasa jest serializowana czy nie)
  • poliformiźmie (który jest zwykle implementowany przy użyciu interfejsów): czyli różne implementacje tego samego obiektu
  • o nowościach w Javie 8: domyślnych metodach
  • jak zaimplementować strategię (np. z użyciem interfejsów :) )
edytowany 1x, ostatnio: margor90, 2018-02-02 22:26

Pozostało 580 znaków

2018-02-02 22:34
NazwaUser
0

ogólnie to: interfejs opisuje, jakie zachowania ma klasa, która go implementuje. niektórzy nazywają to protokołem ale tutaj raczej byłbym ostrożny
mam nadzieje ze pomoglem xD

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: Yandex