JavaRush /Blog Java /Random-PL /Co to są interfejsy
fog
Poziom 18

Co to są interfejsy

Opublikowano w grupie Random-PL
Interfejs to publiczna, ogólnie przyjęta umowa (umowa), która opisuje pewne zachowanie. Do czego są potrzebne? Załóżmy na przykład, że mamy link wskazujący listę ciągów. Załóżmy, że na początku do tej listy dodawanych jest wiele elementów, a następnie cała lista jest przetwarzana jednorazowo. Załóżmy, że decydujemy się zastosować się do dobrze znanej rekomendacji i użyć klasyArrayList:
ArrayList<String> list = new ArrayList<>();
Napisaliśmy zachowanie programu w 100 500 liniach kodu, korzystając z tej listy ciągów i wykorzystaliśmy metody specyficzne dla klasy w celu optymalizacji wydajności ArrayList. Na przykład zapewnieniaCapacity() . Dopóki linie są dodawane na końcu listy, wszystko działa dobrze i szybko. Ale teraz musimy przeorientować nasz program na nieco inny typ pracy, gdzie linie dodawane są głównie na początku listy. Dla tego typu obciążenia jest on znacznie bardziej odpowiedni LinkedList. Jeśli jednak chcemy przetłumaczyć nasz program składający się ze 100 500 linii kodu na szyny LinkedList, wówczas będziemy musieli znaleźć i wyeliminować użycie określonych ArrayListmetod, być może w niektórych miejscach znacznie zmieniając logikę poszczególnych sekcji programu. Gdybyśmy używali tylko tych metod, które są dostępne zarówno w ArrayList, jak i w LinkedList, nie musielibyśmy tego robić. Moglibyśmy po prostu zmienić jedną linię kodu – deklarację listy:
LinkedList<String> list = new LinkedList<>();
Możemy zauważyć, że wygodniej byłoby umieścić deklarację wspólnych metod dla tych klas w klasie nadrzędnej, ewentualnie abstrakcyjnej, np AbstractList. W takim przypadku moglibyśmy zadeklarować naszą listę w następujący sposób:
AbstractList<String> list = new ArrayList<>();
I moglibyśmy szybko zmienić implementację w ten sposób:
AbstractList<String> list = new LinkedList<>();
Ale w tym przypadku klasy, których możemy użyć w naszym programie, są ograniczone tylko do potomków klasy AbstractList, nawet jeśli istnieją bardziej odpowiednie klasy, które nie są potomkami klasy AbstractList, ale mają te same metody i to samo zachowanie. Co powinienem zrobić? Dlatego wymyślono interfejsy . Interfejs to konwencja dotycząca zestawu metod i ich zachowania, do której mogą się stosować całkowicie niepowiązane klasy, umożliwiając odniesienie do dowolnej z nich za pomocą pojedynczego odniesienia. Na przykład tak:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Nawet jeśli AnotherListClassklasy nie mają wspólnych klas przodków, ArrayListz wyjątkiem . Dobrym przykładem interfejsu jest sterowanie samochodem – samochód ma kierownicę, pedały i skrzynię biegów. W zdecydowanej większości samochodów elementy te zachowują się według tej samej konwencji. Na przykład, jeśli obrócisz kierownicę w kierunku przeciwnym do ruchu wskazówek zegara, samochód zamiast przyspieszyć, skręci w lewo, niezależnie od jego marki. Jeśli wiesz, jak korzystać z tych elementów sterujących, możesz łatwo obsługiwać każdy samochód, niezależnie od jego modelu, roku, marki i typu silnika. Co więcej, można sobie wyobrazić sytuację, w której zupełnie inny rodzaj transportu (na przykład statek kosmiczny) ma taki sam interfejs sterowania jak samochody. Jeśli Ty, umiejąc prowadzić samochód, znajdziesz się w fotelu pilota takiego statku, będziesz w stanie uniknąć zagubienia się w tej sytuacji. Powtórzmy jeszcze raz:LinkedListObject
  • Interfejs to umowa (umowa) dotycząca zachowania.
  • Wiele klas, nawet tych nie spokrewnionych dziedziczeniem, może zadeklarować, że wyraża zgodę na przestrzeganie tej umowy (implementacja interfejsu).
  • Umieszczenie opisu zachowania w osobnym interfejsie jest bardzo wygodne, gdyż zwiększa elastyczność kodu, pozwalając na przełączenie implementacji (klasy realizującej interfejs) interfejsu na klasy niepowiązane dziedziczeniem.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION