JavaRush /Blog Java /Random-PL /Dlaczego potrzebne są interfejsy?
Павел
Poziom 11

Dlaczego potrzebne są interfejsy?

Opublikowano w grupie Random-PL
Dlaczego potrzebne są interfejsy? Dlaczego dziedziczenie interfejsu jest konieczne? Dlaczego potrzebny jest polimorfizm? Dla tych, którzy czytali i rozumieli, jak tworzyć interfejsy, ale nie rozumieli dlaczego.

Zastrzeżenie: W tym artykule i w kolejnych nazewnictwo klas i metod zostanie podane w języku rosyjskim.

Jeśli chodzi o zasady programowania obiektowego (OOP): polimorfizm, dziedziczenie i enkapsulację, warto zastosować analogie ze świata rzeczywistego. Dużą zaletą OOP jest to, że w programie możemy symulować część prawdziwego wszechświata. Modelujmy rodzinę Iwanowa: tata , mama i chłopiec Petya . Od taty Petya odziedziczył nawyk siorbania podczas picia herbaty, a od mamy odziedziczył nawyk zaciskania ust podczas czytania. Jeśli spróbujemy zaimplementować tę sytuację do programu, otrzymamy trzy klasy:
class Папа
class Мама
class Петя
Tata i mama mają nawyki, które należy przekazać Pete’owi . Nawyki są pewnego rodzaju działaniami, dlatego najlepiej wdrożyć je w świecie oprogramowania jako metody: Tata Najpierw :
class Папа {
public void прихлюпывать() {
System.out.println("Хлюп");
    }
}
Teraz mama :
class Мама {
public void поджимать() {
System.out.println("Поджать губки");
   }
}
Jeśli mówimy o dziedziczeniu, logiczne jest napisanie kodu w ten sposób:
class Петя extends Папа, Мама {
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Oznacza to, że jednocześnie odziedziczysz Petyę od taty i mamy . Jeśli napiszesz to w ten sposób, kompilator będzie narzekał, ponieważ w Javie nie można zaimplementować dziedziczenia wielokrotnego. Swoją drogą w C++ jest to możliwe, ale nie w Javie, bo przy wielokrotnym dziedziczeniu mogą pojawić się duże problemy: szczegółowo piszą w Internecie . Dlaczego potrzebne są interfejsy?  - 1Aby obejść to „niemożliwe”, Java ma interfejsy. A dla nawyków wymyślimy własny interfejs. Nawet dwa: Będą wyglądać tak:
public interface ПривычкиПапы {
    public void прихлюпывать();
}
public interface ПривычкиМамы {
    public void поджимать();
}
W interfejsie opisaliśmy tylko nawyki, ale nie opisaliśmy, co konkretnie robią, ponieważ konkretną implementację będziemy pisać w klasach. Na początek dajmy tacie i mamie ich prawne nawyki.
class Папа implements ПривычкиПапы {

   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}

class Мама implements ПривычкиМамы{

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
A teraz jednoczesne przenoszenie nawyków z taty i mamy na Pete'a jest całkowicie legalne
class Петя implements ПривычкиПапы, ПривычкиМамы {

@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Oznacza to, że wielokrotna implementacja (częściej nazywana implementacją) w Javie jest całkiem możliwa. Dlaczego potrzebne są interfejsy?  - 2Znaczenie interfejsów powinno być teraz jasne - w Javie można zaimplementować wielokrotne dziedziczenie za pomocą interfejsów. Jeśli rozwiniemy sytuację dalej, na przykład: w końcu tata i mama prawdopodobnie mają nawyki, których nie przekazali Petyi , a Petya może też mieć swoje osobiste nawyki. W kolejnych odcinkach dowiesz się, jak przenieść tę niezwykle ważną Santa Barbara na samolot Java. To nie jedyny przykład zrozumienia interfejsów.Jeśli nie czytałeś poniższych artykułów, koniecznie przeczytaj: Interfejsy w Javie (jeśli nie są otwarte, możesz wyjść ze swojego profilu lub czytać w trybie incognito) Dlaczego interfejsy są potrzebne w Java - zaimplementuj wszystkie przykłady z artykułu tutaj i zmień metody zarówno w interfejsach, jak i w klasach: nazwy metod, podpisy (co metoda przyjmuje jako dane wejściowe), typy wyjściowe metod. Zrozum samodzielnie: - różnicę przy implementacji interfejsu z klasą i klasą abstrakcyjną; - metody domyślne.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION