Sollte eine abstrakte Klasse mindestens eine abstrakte Methode haben?
-
21-09-2019 - |
Frage
Ist es für eine abstrakte Klasse notwendig, mindestens eine abstrakte Methode zu haben?
Lösung
Das Thema dieses Beitrags und der Körper stellen zwei verschiedene Fragen:
- Sollte es mindestens ein abstraktes Mitglied haben?
- Ist es notwendig, mindestens ein abstraktes Mitglied zu haben?
Die Antwort auf #2 ist definitiv nein.
Die Antwort auf #1 ist subjektiv und eine Frage des Stils. Persönlich würde ich ja sagen. Wenn Ihre Absicht darin besteht, zu verhindern, dass eine Klasse (ohne abstrakte Methoden) instanziiert wird, ist der beste Weg, um dies zu bewältigen, mit a private
protected
Konstruktor, nicht durch markieren abstract
.
Andere Tipps
Nein, es ist nicht notwendig. Sie sehen das oft wieder in "Vorlagenmethode" Designmuster wie HttpServlet
, wobei jede Methode bereits ein Standardverhalten definiert hat und es frei ist, nur eine (oder mehr) von ihnen anstelle von zu überschreiben alle von ihnen.
In JDK 1.0 war es in der Tat notwendig, mindestens eine abstrakte Methode in einer abstrakten Klasse zu haben. Diese Einschränkung wurde in JDK 1.1 (1997? (Ich bin alt)) und solche Klassen, die der Java -Bibliothek hinzugefügt wurden, wie z. java.awt.event.KeyAdapter
.
In C ++ benötigen Sie mindestens eine reine virtuelle Funktion, um eine Unterklasse erforderlich zu machen, und mindestens eine virtuelle Funktion, um der Klasse RTTI hinzuzufügen. Normalerweise ist es sinnvoll, den Destruktor zu verwenden.
Beachten Sie bei Überschreibungen nicht abstrakter Methoden, verwenden Sie @Override
ist eine gute Idee. Es gibt nicht nur den Leser an wichtige Informationen darüber, was der Code versucht, sondern entdeckt auch gemeinsame Fehler, bei denen Tippfehler oder falsche Parametertypen die Überschreibung verhindert.
Nein - Sie können eine Klasse zum Zusammenfassung deklarieren, ohne abstrakte Methoden zu haben. Es kann konzeptionell keinen Sinn ergeben, wenn eine Instanz dieser Klasse existiert, oder Sie möchten möglicherweise sicherstellen, dass nur Unterklassen dieser Klasse instanziiert werden können (aus irgendeinem Grund)
Wenn eine Klasse eine hat abstract
Modifikator auf seiner Erklärung wird es abstract
Klasse.