[JAVA] Zusammenfassung der "abstrakten Schnittstellenunterschiede"

――Die Schlussfolgerung lautet wie folgt.

  1. Abstract wurde verwendet, um Speicherplatz zu sparen. Der Freiheitsgrad war jedoch zu hoch und es wurde eine Gelegenheit, eine Schnittstelle bereitzustellen.
  2. Die Schnittstelle wurde erstellt, um Polymorphismus bereitzustellen (die ArrayList oder LinkedList implementiert).
  3. Der Schnittstellenstandard wurde erstellt, um das Mooresche Gesetz zu behandeln.

Wie abstrakt wurde zur Verfügung gestellt

Zunächst erkläre ich die Vererbungsfunktion aus der Grundgeschichte. (Es tut mir leid, wenn Sie es wissen.)

Ältere Programme hatten wenig kommerziellen Wert und nur geringe Entwicklungen. Von da an wurde es eine groß angelegte Entwicklung, und es gab ein Problem, dass wir großen Code leichter lesbar machen wollten und auch keinen Speicher hatten. Wenn ich also versuche, Speicherplatz zu sparen, möchte ich Wiederverwendbarkeit oder Abstraktion! So wird es sein.

(Bestätigung der Bedeutung der Abstraktion) Wenn wir zum Beispiel anderen erklären "Baseball, Fußball, Tennis usw. machen Spaß!", Mit einem Wort: "Sport macht Spaß!"

Früher hatte die Programmierung nicht die Macht (Abstraktion), solche doppelten Bedeutungen zusammenzusetzen. Hier kam die objektorientierte (Java) Zusammenfassung ins Spiel, die auch die übergeordnete Klasse (Zusammenfassung) ausdrücken kann. (Zu diesem Zeitpunkt gab es keine Schnittstelle.)

Das Abstract war so flexibel, dass es schwer zu lesen war. Sowohl die Methode (Funktion) als auch die globale Variable (Zustand) kamen heraus und wurden nicht intuitiv verstanden. Nun, ich könnte es immer noch benutzen.

Wie die Schnittstelle zur Verfügung gestellt wurde

An einem Punkt gab es eine Anfrage nach objektorientierter Entwicklung unter Verwendung von Abstract. Ich möchte es mit Polymorphismus machen. Und ich möchte das Lesen erleichtern, indem ich etwas mehr Einschränkungen festlege.

Apropos Polymorphismus, es ist ein Listentyp. Sie möchten beispielsweise, dass der Listentyp sowohl ArrayList als auch LinkedList verarbeiten kann, und Sie möchten .size () und .add () mit jedem Typ verarbeiten können.

Wenn Sie Vererbungsbeziehungen für solche Zwecke handhaben können, schreiben Sie sie ordentlich in die Benutzeroberfläche, damit sie leichter zu lesen sind! Also wurde die Schnittstelle zu Java bereitgestellt.

Wie die Standardschnittstelle bereitgestellt wurde Die Wurzel des "abstrakten Schnittstellenunterschieds"

Im Laufe der Zeit wurde es zu Java8 und die Schnittstelle selbst konnte Funktionen haben. Dies ist die Standardfunktion. Ich bin sicher, dass diese Geschichte ein Problem ist, bei dem ich den Unterschied zwischen abstrakt und Schnittstelle nicht wirklich verstehe.

Der Grund, warum diese Standardfunktion bereitgestellt wurde, unterscheidet sich von der bisherigen Anforderung zur Abstraktion. Ich denke, es war eine Maßnahme gegen Moores Gesetz. Es wurde eine gründliche Parallelisierung gefordert, da wir die Ressourcen bestehender Halbleiter so weit wie möglich einsparen wollten, um das Problem der Ressourcenknappheit so weit wie möglich lösen zu können.

Daher wurde eine Stream-API erstellt, um die parallele Verarbeitung einfach und sicher zu machen, und ein einfacher Lambda-Ausdruck wurde eingeführt, da er schwer zu verstehen war, weil er voller anonymer Klassen war.

Mit anderen Worten, Standard wurde erstellt, um eine Stream-API für Moores Gegenmaßnahmen zum Zusammenbruch von Gesetzen bereitzustellen. Daher gibt es derzeit keine Regel, dass Standard frei verwendet werden kann.

Zusammenfassung

Die Verwendung von default ist im Grunde eine Funktion, die für die Stream-API / den Lambda-Ausdruck erforderlich ist, und ich war mir nicht sicher, ob ich die Standardfunktion frei verwenden kann. Es wird schön sein, eine Weile zu warten.

Neben 1

Sie konnten nicht mehrere Abstracts wie die Schnittstelle erben. Es scheint, dass es auch eine Geschichte der Erstellung einer anderen Abstraktionsfunktionsschnittstelle gibt, da diese mehrmals erben möchte. (Wenn eine Mehrfachvererbung möglich ist, wird es schwierig sein, Fehler aufzuspüren, und es scheint, dass es sich in der Vergangenheit um eine verbotene Person oder eine Büchse der Pandora handelte und dagegen war.)

Neben 2 Objektorientierte Geschichte

Computer ist ein Hobby ↓ Computer sind eine Geschäftsquelle! ↓ Computer sind eine großartige Branche! Ich möchte die Programmierung in größerem Maßstab durchführen! Zumindest möchte ich, dass die Programmierung eine Abstraktionsfunktion hat! Also möchte ich auch Speicherplatz sparen! ↓ Hochleistungs-Java entsteht. Ein Abstract wird ebenfalls bereitgestellt. ↓ Es ist schwer, abstrakt zu lesen. Ich möchte auch Polymorphismus. ↓ Schnittstelle bereitstellen ↓ Moores Gesetz ist in Gefahr ...? Ich kann nicht lachen ... Saya! Da wir vorhandene Halbleiterressourcen effektiv handhaben möchten, stellen wir eine Funktion bereit, mit der wir eine gründliche Parallelverarbeitung auf präzise Weise schreiben können! ↓ Bereitstellung der Stream-API oder des Lambda-Ausdrucks

Ich denke so war es.

QA-Ecke

Q. Was ist der Zweck der Reifizierungszwangsfunktion (Override)?

A. Wenn Sie Dinge abstrahieren wollen, müssen Sie das Gegenteil verkörpern. Wenn Sie beispielsweise versuchen, "mit Baseball spielen", "mit Fußball spielen" und "mit Tennis spielen" zu implementieren.

(Fiktive Sprache)

abstract sports
do (play with ??)

Ich denke, dass es entworfen wird. Ist es nicht einfacher, diese Verdinglichung jedes Mal zu erzwingen?

@Override
do (play with "baseball")
@Override
do (play with "soccer")
@Override
do (play with "tennis")

Ich denke, es wird. Die Antwort auf Ihre Frage lautet also: "Ich wollte es abstrakt gestalten, daher war es einfach, eine konkrete Funktion zu haben."

Recommended Posts

Zusammenfassung der "abstrakten Schnittstellenunterschiede"
Schnittstelle und Zusammenfassung
Richtige Verwendung der Schnittstelle und der abstrakten Klasse
Zusammenfassung der OpenJDK-Quellen
JAR-Datei Übersicht
Zusammenfassung zur Informationssicherheit
Zusammenfassung der Verwendung von FragmentArgs
Zusammenfassung der Verwendung von DBFlow
Zusammenfassung der Java-Unterstützung 2018
Schnittstelle / Abstrakte Klasse / Überschreiben
Verwendung von Abstract Class und Interface in Java richtig
Zusammenfassung der erweiterten Vererbung, Schnittstelle -java
Zusammenfassung von FileInputStream und BufferedInputStream
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
Zusammenfassung der Verwendung von ButterKnife
[Java] Zusammenfassung der Operatoren (Operator)
Zusammenfassung der Grundlagen der Java-Sprache
Zusammenfassung der Java Math Klasse
Zusammenfassung der Grundfunktionen von ImageJ
[Java] Zusammenfassung der Steuerungssyntax
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der Entwurfsmuster
[Java] Zusammenfassung der mathematischen Operationen
Unterschied zwischen Schnittstelle und abstrakter Klasse
Spring Framework 5.0 Zusammenfassung der wichtigsten Änderungen
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Zusammenfassung des Pakets [Java Silver Study]
[Rails] Zusammenfassung der komplizierten Routing-Konfiguration
Zusammenfassung des Anfangszustands der Gerätesteuerung
Zusammenfassung häufig verwendeter Docker-Befehle
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index
Zusammenfassung der objektorientierten Programmierung mit Java