Abstrakte Klasse gegen Schnittstelle in Java

Mir wurde eine Frage gestellt, ich wollte meine Antwort hier überprüfen lassen.

Q: In welchem ​​Szenario ist es sinnvoller, eine abstrakte Klasse zu erweitern, als die Schnittstelle (n) zu implementieren?

EIN: Wenn wir eine Schablonenmethode als Entwurfsmuster verwenden.

Hab ich recht ?

Es tut mir leid, wenn ich die Frage nicht klar stellen konnte.
Ich kenne den grundlegenden Unterschied zwischen abstrakter Klasse und Schnittstelle.

1) Verwenden Sie die abstrakte Klasse, wenn die Anforderung so ist, dass in jeder Unterklasse dieselbe Funktionalität für eine bestimmte Operation (Implementieren der Methode) und eine andere Funktionalität für einige andere Operationen (nur Methodensignaturen) implementiert werden muss.

2) Verwenden Sie die Schnittstelle, wenn die Signatur identisch (und die Implementierung unterschiedlich) sein muss, damit Sie die Schnittstellenimplementierung einhalten können

3) Wir können maximal eine abstrakte Klasse erweitern, aber mehr als eine Schnittstelle implementieren

Wiederholung der Frage: Gibt es neben den oben genannten Szenarien noch andere Szenarien, in denen speziell die abstrakte Klasse verwendet werden muss (man sieht, dass das Entwurfsmuster der Vorlagenmethode nur konzeptionell darauf basiert)?

Interface vs. Abstract-Klasse

Die Wahl zwischen diesen beiden Möglichkeiten hängt wirklich davon ab, was Sie tun möchten. Zum Glück kann Erich Gamma uns dabei helfen.

Wie immer gibt es einen Kompromiss, eine Schnittstelle gibt Ihnen Freiheit in Bezug auf die Basisklasse, eine abstrakte Klasse gibt Ihnen diedie Freiheit, später neue Methoden hinzuzufügen. - Erich Gamma

Siekann ein Interface nicht ändern, ohne viele andere Dinge ändern zu müssen Die einzige Möglichkeit, dies zu vermeiden, besteht darin, ein ganz neues Interface zu erstellen, was möglicherweise nicht immer gut ist.

Abstract classes sollte in erster Linie für Objekte verwendet werden, die eng miteinander verbunden sind.Interfaces sind besser darin, gemeinsame Funktionen für nicht verwandte Klassen bereitzustellen.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage