In Bezug auf Ihre Anfragen:
Q1: Ich bin verwirrt darüber, wann ich diese Art von Standardmethoden einer Schnittstelle verwenden sollte, anstelle einer abstrakten Klasse (mit abstrakten Methoden)
Laut der Oracle-Dokumentation zu Standardmethoden
Standardmethoden ermöglichen es Ihnen, neue Funktionalitäten zu den Schnittstellen Ihrer Bibliotheken hinzuzufügen und eine binäre Kompatibilität mit Code sicherzustellen, der für ältere Versionen dieser Schnittstellen geschrieben wurde.
Wann sollte also eine Schnittstelle mit Standardmethoden verwendet werden und wann sollte eine abstrakte Klasse verwendet werden? Sind die abstrakten Klassen immer noch nützlich in diesem Szenario?
Die Oracle-Dokumentation bietet die perfekte Antwort.
Abstrakte Klassen im Vergleich zu Schnittstellen:
Abstrakte Klassen ähneln Schnittstellen. Sie können nicht instanziiert werden und können eine Mischung aus Methoden enthalten, die mit oder ohne Implementierung deklariert sind.
Mit abstrakten Klassen können Sie jedoch Felder deklarieren, die nicht statisch und endgültig sind, und öffentliche, geschützte und private konkrete Methoden definieren.
Bei Schnittstellen sind alle Felder automatisch öffentlich, statisch und endgültig, und alle von Ihnen deklarierten oder definierten Methoden (als Standardmethoden) sind öffentlich.
Sie können nur eine Klasse erweitern, unabhängig davon, ob sie abstrakt ist oder nicht. Aber Sie können beliebig viele Schnittstellen implementieren.
Verwendungszwecke von abstrakten Klassen:
-
Sie haben keine Implementierung in der Basisklasse (mit gemeinsamen Daten) und nur die Unterklasse müssen ihre eigene Implementierung definieren. Sie benötigen eine abstrakte Klasse anstelle einer Schnittstelle, da Sie den Zustand mit den Unterklassen teilen möchten.
-
Abstrakte Klassen werden in der Implementierung des Muster des abstrakten Fabrik entwurfs verwendet (erzeugungsmuster)
Beispiel: Fabrik-Muster. Wann sollen Fabrikmethoden verwendet werden?
-
Sie können viele Anwendungsfälle von abstrakten Klassen in Entwurfsmustern finden.
Beispiel: Bridge-Muster (Strukturmuster)
Trennt das Bridge-Muster eine Abstraktion von einer Implementierung?
-
Abstrakte Klassen werden im Decorator-Entwurfsmuster verwendet
Beispiel: Wann sollte das Decorator-Muster verwendet werden?
-
Abstrakte Klasse ist am besten geeignet für das Vorlage-Methode-Muster, bei dem Sie ein Skelett erstellen müssen.
Beispiel: Vorlagendesignmuster in JDK, konnte keine Methode finden, die eine Reihe von Methoden definiert, die in einer bestimmten Reihenfolge ausgeführt werden sollen