JavaRush /Blog Java /Random-PL /Dlaczego dziedziczenie interfejsu jest konieczne?
Павел
Poziom 11

Dlaczego dziedziczenie interfejsu jest konieczne?

Opublikowano w grupie Random-PL
Dlaczego potrzebne są interfejsy? Dlaczego dziedziczenie interfejsu jest konieczne? Dlaczego potrzebny jest polimorfizm? Dla tych, którzy przeczytali i zrozumieli, jak dziedziczić interfejs, ale nie rozumieli dlaczego. Ostatnim razem, na przykładzie zwykłej rodziny Iwanowa, sprawdziliśmy, dlaczego potrzebne są interfejsy. Kontynuujemy digitalizację zmartwionej rodziny. Każdy człowiek ma pewne nawyki, których od nikogo nie odziedziczył i nikomu nie przekazał - swoje osobiste nawyki. Naszym zadaniem jest wyposażenie każdego członka rodziny w unikalne nawyki. Przejdźmy na płaszczyznę Java: musimy zaimplementować unikalne metody w klasach, które będą należeć tylko do tych klas. No dalej! Oto Petya:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
To jest tata:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
To jest mama:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Doskonały! Wszystko działa jak powinno! W pierwszym artykule powiedziano, że program jest odzwierciedleniem świata rzeczywistego. Najciekawszą właściwością rzeczywistości jest to, że cały czas się zmienia. Rodzina Iwanowów nie była wyjątkiem, mieli słodką córkę o imieniu Masza. A zwyczaj trzepotania rzęsami odziedziczyła po mamie i pociągania nosem po tacie. Musimy wprowadzić zmiany w naszym programie. Dlaczego dziedziczenie interfejsu jest konieczne?  - 1Daj spokój, to nie jest takie trudne, najważniejsze jest logiczne myślenie. W końcu wszyscy wiedzą, po co potrzebne są interfejsy. Stwórzmy teraz interfejs dla Nawyków Maszy , opiszmy tam metody clapElashes() i squish() , zaimplementujmy je na Maszy i gotowe. Co z tego, że metody o tej samej nazwie są już zaimplementowane w innych interfejsach, można to zrobić jednorazowo. Dlaczego dziedziczenie interfejsu jest konieczne?  - 2Rzeczywiście, kto wie, jakie plany ma rodzina Iwanów, jeśli urodzi się Seryozha , który odziedziczy nawyki po tacie, mamie, pradziadku i kimś innym z czwartego pokolenia, za każdym razem tworząc interfejs, taki jak: interfejs Nawyki Seryozha , i tam zadeklarować metody, które można już zadeklarować setki razy w innych interfejsach? Za kilka, trzy pokolenia ryzykujemy otrzymanie interfejsów z masą identycznych metod, które są już opisane w innych interfejsach, a jeśli będziemy musieli zmienić nazwę jakiegoś nawyku (a jest to całkiem możliwe – wszak świat się zmienia) , to jak wymyślić to spaghetti, nie mogę sobie wyobrazić. Pozostaje tylko siedzieć i marzyć o cudzie. Dlaczego dziedziczenie interfejsu jest konieczne?  - 3Gdyby każdy nawyk miał swój własny interfejs. Wyobraźmy sobie:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
A następnie, niczym w Lego, moglibyśmy, wykorzystując wielokrotne dziedziczenie z indywidualnych nawyków, wpisać interfejs, którego potrzebujemy dla nawyków konkretnego członka rodziny. Coś takiego:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
A następnie po prostu zaimplementuj żądany interfejs do żądanej klasy, na przykład Mamy:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
To samo można zrobić z tatą, Petyą i Maszą . A wtedy, wraz z ekspansją rodziny Iwanowa, nie byłoby problemów z nawykami, po prostu przetasowalibyśmy je poprzez dziedziczenie na poziomie interfejsu, jak składniki sałatki i nie tworzylibyśmy mnóstwa metod o tej samej nazwie. Ech, sny, sny... Dlaczego dziedziczenie interfejsu jest konieczne?  - 4Narysowany mężczyzna ma rację, to naprawdę jest możliwe - teraz zapisano symulację rodziny Iwanów! Uważny czytelnik może zadać pytanie: "Po co tworzyć interfejsy dla każdego członka rodziny? Mamy zestaw akcji - od razu zaimplementuj je dla wymaganej klasy." Wyobraźmy sobie, że w wielu równoległych światach istnieją sobowtóry Petyi i wszyscy Petyowie muszą wdrożyć interfejs Nawyki Petyi
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
A co by było, gdyby nie było wspólnego interfejsu?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Powoduje to bardziej powtarzalny kod. Dziedziczenie interfejsu sprawia, że ​​aplikacja jest bardziej elastyczna pod względem zmian, w szczególności można rozwiązać problemy z powtarzającymi się metodami. Należy jeszcze raz pamiętać, że dozwolone jest wielokrotne dziedziczenie interfejsów.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION