Java Interfejs

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 ?

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.

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 :) )
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

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