Idea Interfejsów

0

Witam, czytałem trochę o interfejsach i nie rozumiem jakie mogą mieć zastosowanie, skoro można w nich zadeklarować jedynie metody bez implementacji jak gdzieś wyczytałem:

"interfejs to kontrakt, który mówi co klasa implementująca może robić, ale nie jak ma to robić"

więc po co implementować interfejsy ? Nie lepiej w klasie napisać metody wraz z ciałem ?

Nie rozumiem idei interfejsów proszę o wyrozumiałość i łopatologiczne wyjaśnienie, dopiero zaczynam zabawę z javą.

1

Myślę, że łatwo to zrozumiesz, jeżeli przyjrzysz się bliżej kolekcjom w javie.
Praktyczny przykład:
Mamy interfejs List<E>, który udostępnia kilka funkcji, miedzy innymi np add(E object);
Jak tworzysz listę to masz do wyboru np ArrayList albo LinkedList które implementują interfejs List<E>. Każda z nich może działać inaczej, w inny sposób przechowywać elementy, ale każda z nich udostępnia funkcję add(E object) dodające elementy.
List mowi co może robic, ArrayList lub LinkedList mówią jak to zrobić.

List<Integer> list = new ArrayList();
List<Integer> list2 = new LinkedList();

list.add(5);       // dodanie 5 do listy, która jest ArrayListą
list2.add(6);    // dodanie 6 do listy, która jest LinkedListą

Interfejsy dają tą elastyczność, że jakbyś chciał to możesz napisać własną implementację listy (czyli napisac co ma sie dziac przy funckji add() iid) i jej używać za pomocą interfejsu List:

List<Integer> myTheBestList = new MySuperHiperUltraBetterList();
myTheBestList.add(333333);       // dodanie 333333 do listy, która jest MySuperHiperUltraBetterListą
2

@JavaNewbe bo jeśli zrobisz tak jak napisałeś to nie będziesz mógł nigdzie napisać kodu generycznego pasującego do wszystkich obiektów przejawiających pewne zachowanie. Jeśli masz np. metodę

public void generycznaMetoda(Iterfejs obiekt){
    obiekt.metodaZInfterfejsu();
}

albo lepiej nawet

public <T extends Iterfejs> void generycznaMetoda(T obiekt){
    obiekt.metodaZInfterfejsu();
}

To widzisz że taka metoda może zostać wywołana z dowolnym obiektem który implementuje interfejs Iterfejs. W twoim przypadku, takie coś nie jest możliwe.

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