JavaRush /Java-Blog /Random-DE /Warum ist eine Schnittstellenvererbung notwendig?
Павел
Level 11

Warum ist eine Schnittstellenvererbung notwendig?

Veröffentlicht in der Gruppe Random-DE
Warum werden Schnittstellen benötigt? Warum ist eine Schnittstellenvererbung notwendig? Warum wird Polymorphismus benötigt? Für diejenigen, die gelesen und verstanden haben, wie man eine Schnittstellenvererbung durchführt, aber nicht verstanden haben, warum. Letztes Mal haben wir am Beispiel der gewöhnlichen Ivanov-Familie untersucht, warum Schnittstellen benötigt werden. Wir digitalisieren weiterhin die unruhige Familie. Jeder Mensch hat einige Gewohnheiten, die er von niemandem geerbt oder an niemanden weitergegeben hat – seine persönlichen Gewohnheiten. Unsere Aufgabe ist es, jedem Familienmitglied einzigartige Gewohnheiten zu vermitteln. Kommen wir zur Java-Ebene: Wir müssen eindeutige Methoden in Klassen implementieren, die nur zu diesen Klassen gehören. Nun, machen Sie weiter! Das ist Petja:
class Петя implements ПривычкиПапы, ПривычкиМамы {

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

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

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

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

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

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

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Perfekt! Alles funktioniert wie es soll! Im ersten Artikel hieß es, das Programm sei ein Abbild der realen Welt. Die interessanteste Eigenschaft der Realität ist, dass sie sich ständig verändert. Die Familie Ivanov war keine Ausnahme; sie hatte eine süße Tochter namens Mascha. Und sie hat von Mama die Angewohnheit geerbt, mit den Wimpern zu klimpern und von Papa zu schniefen. Wir müssen Änderungen an unserem Programm vornehmen. Warum ist eine Schnittstellenvererbung notwendig?  - 1Komm schon, es ist gar nicht so schwer, die Hauptsache ist, logisch zu denken. Schließlich weiß jeder, warum Schnittstellen benötigt werden. Jetzt erstellen wir eine Schnittstelle Masha’s Habits , beschreiben dort die Methoden clapElashes() und squish() , implementieren sie in Masha und fertig. Wenn also Methoden mit demselben Namen bereits in anderen Schnittstellen implementiert sind, können Sie dies einmal tun. Warum ist eine Schnittstellenvererbung notwendig?  - 2In der Tat, wer weiß, welche Pläne die Familie Ivanov hat, wenn Seryozha geboren wird, der die Gewohnheiten von Vater, Mutter, Urgroßvater und jemand anderem aus der vierten Generation erbt und jedes Mal eine Schnittstelle erstellt, wie zum Beispiel: Schnittstelle Seryozhas Gewohnheiten und dort Methoden deklarieren, die bereits hunderte Male in anderen Schnittstellen deklariert werden können? In ein paar oder drei Generationen riskieren wir, Schnittstellen mit einer Reihe identischer Methoden zu bekommen, die bereits in anderen Schnittstellen beschrieben sind, und wenn wir den Namen aus einer Gewohnheit ändern müssen (und das ist durchaus möglich, schließlich verändert sich die Welt). , wie ich dann diese Spaghetti herausfinden soll, kann ich mir nicht vorstellen. Jetzt bleibt nur noch das Sitzen und Träumen von einem Wunder. Warum ist eine Schnittstellenvererbung notwendig?  - 3Wenn nun jede Gewohnheit ihre eigene Schnittstelle hätte. Stellen wir uns vor:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Und dann könnten wir, wie in Lego, durch mehrfache Vererbung einzelner Gewohnheiten die Schnittstelle eingeben, die wir für die Gewohnheiten eines einzelnen Familienmitglieds benötigen. Irgendwie so:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Und dann einfach die gewünschte Schnittstelle zur gewünschten Klasse implementieren, zum Beispiel Mom:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Das Gleiche könnte man mit Papa, Petja und Mascha machen . Und dann, mit der Erweiterung der Ivanov-Familie, gäbe es keine Probleme mit Gewohnheiten, wir würden sie einfach durch Vererbung auf Schnittstellenebene mischen, wie Zutaten in einem Salat, und würden nicht eine Reihe von Methoden mit demselben Namen produzieren. Äh, Träume, Träume... Warum ist eine Schnittstellenvererbung notwendig?  - 4Der gezeichnete Mann hat recht, das ist tatsächlich möglich – jetzt ist die Simulation der Familie Ivanov gerettet! Ein aufmerksamer Leser könnte die Frage stellen: „Warum Schnittstellen für jedes Familienmitglied erstellen? Wir haben eine Reihe von Aktionen – implementieren Sie sie sofort für die erforderliche Klasse.“ Stellen wir uns vor, dass es in vielen Parallelwelten Petyas Doppelgänger gibt und dass alle Petyas die Schnittstelle „Petyas Gewohnheiten“ implementieren müssen
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
Was wäre, wenn es keine gemeinsame Schnittstelle gäbe?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Dies führt zu mehr sich wiederholendem Code. Durch die Schnittstellenvererbung kann die Anwendung flexibler geändert werden, insbesondere können Probleme mit sich wiederholenden Methoden gelöst werden. Bitte beachten Sie noch einmal, dass eine Mehrfachvererbung von Schnittstellen zulässig ist.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION