Muss eine abstrakte Klasse mindestens eine abstrakte Methode haben?Sollte eine abstrakte Klasse mindestens eine abstrakte Methode haben?
Antwort
Gegenstand dieser Post und der Körper stellt zwei verschiedene Fragen:
- Sollte es mindestens ein abstraktes Mitglied hat?
- 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 Sie verhindern wollen, dass eine Klasse (ohne abstrakte Methoden) instanziiert wird, ist dies am besten mit einem Konstruktor zu bewerkstelligen, und nicht mit abstract
.
Möglicherweise gibt es konzeptionelle Gründe, warum Sie eine abstrakte Klasse wünschen, die keine abstrakten Methoden enthält ... – thecoop
Jedes Beispiel für ein solches Szenario, in dem Sie keine abstrakte Methode in einer abstrakten Klasse benötigen? –
@sai praveen, MouseAdapter ist ein Beispiel (wenn ein bisschen Spezialität und stark sprachspezifisch). – Yishai
Nein - Sie können eine Klassenzusammenfassung ohne abstrakte Methoden deklarieren. Es macht möglicherweise keinen Sinn, wenn eine Instanz dieser Klasse existiert, oder Sie möchten sicherstellen, dass nur Unterklassen dieser Klasse instanziiert werden können (aus welchen Gründen auch immer).
+1 Diese Antwort die meisten "auf den Punkt" und knappe Antwort hier. Vielen Dank! – AndHeCodedIt
Nein, das ist nicht notwendig. Sie sehen dies oft zurück in "template method" Design-Muster, wie HttpServlet
, wobei jede Methode bereits Standardverhalten definiert hat und Sie sind frei, nur eine (oder mehrere) von ihnen anstelle alle von ihnen zu überschreiben.
+1, weil dies zumindest gelegentlich ein guter Punkt ist, obwohl ich es ein wenig seltsam finde, dass jede Template-Methode-Musterklasse für alles einen vernünftigen Standard haben könnte. – dsimcha
Im Falle von 'HttpServlet' ist es sinnvoll, HTTP-Fehler 503" Method not allowed "in einer der standardmäßig implementierten' doXXX() 'Methoden zurückzugeben, voll gemäß der HTTP-Spezifikation. – BalusC
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)) entfernt, und solche Klassen wurden der Java-Bibliothek hinzugefügt, z. B. 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 RTTI zur Klasse hinzuzufügen. In der Regel ist es sinnvoll, den Destruktor zu verwenden.
Hinweis beim Überschreiben nicht abstrakter Methoden ist die Verwendung von @Override
eine gute Idee. Es informiert den Leser nicht nur über wichtige Informationen zu dem, was der Code versucht, sondern entdeckt auch häufige Fehler, bei denen Tippfehler oder falsche Parameter die Überschreibung verhindern.
+1 für die Geschichtsstunde. :) –
Wenn eine Klasse einen abstract
Modifizierer auf ihrer Deklaration hat, wird sie abstract
Klasse.
Es ist vollkommen syntaktisch gültig, eine Klasse als abstrakt zu definieren, wenn sie keine abstrakten Methoden hat. Ich stimme nicht ab, aber diese Antwort ist sachlich falsch. Beachten Sie, dass die Sprache für die Frage Java und nicht C++ ist. – CPerkins
@CPerkins - Ich sage das, indem ich sage "nicht umgekehrt". – fastcodejava
Und du liegst immer noch falsch. Wenn eine Klasse den 'abstrakten' Modifikator hat, ist sie per Definition abstrakt, ob sie abstrakte Methoden hat oder nicht. – EJP
- 1. Eine abstrakte Methode überschreibt eine abstrakte Methode
- 2. eine abstrakte Klasse erbt eine andere abstrakte Klasse Ausgabe
- 3. Kann eine abstrakte Klasse eine endgültige Methode haben?
- 4. Vertragsklasse sollte eine abstrakte Klasse sein
- 5. Java abstrakte Klasse, abstrakte Konstruktor
- 6. Abstrakte Klasse, wie Methode abstrakt
- 7. Hat eine abstrakte Klasse eine VTABLE?
- 8. generische Methode in abstrakte Klasse
- 9. eine abstrakte Methode eines Kindes-Klasse von einer abstrakten Klasse
- 10. Warum ist java.lang.Throwable nicht eine abstrakte Klasse?
- 11. Sollte ich abstrakte Methoden erstellen, wenn meine abstrakte Klasse eine Schnittstelle implementiert?
- 12. Abstrakte Methoden ohne abstrakte Klassen
- 13. Abstrakte Klasse oder öffentliche Methode mit Schnittstelle
- 14. JMockit abstrakte Klasse Instanz
- 15. Wie erzwingen abstrakte Klasse Childs eine statische Methode zu implementieren?
- 16. Array von Zeigern auf eine abstrakte Klasse
- 17. Copykonstruktor: deep eine abstrakte Klasse Kopieren
- 18. Hibernate-Mapping (XML) eine abstrakte Klasse
- 19. C++: Eine abstrakte Klasse als Mitglied
- 20. Kann eine abstrakte Klasse instanziiert werden?
- 21. interne abstrakte Methoden. Warum sollte jemand sie haben?
- 22. C# Abstrakte generische Methode
- 23. Deserialize Abstrakte Klasse
- 24. mockForConstraintsTests abstrakte groovy Klasse
- 25. abstrakte Klasse in PHP
- 26. abstrakte Methode in einer virtuellen Klasse
- 27. Parsen anonyme Klasse implementiert keine abstrakte Methode
- 28. Abstrakte Klasse mit Standardwert
- 29. Abstrakte Klasse als funktionale Schnittstelle
- 30. Abstrakte Klasse als Fremdschlüssel
Siehe auch http://stackoverflow.com/questions/362446/abstract-class-with-all-concrete-methods, aber ich glaube nicht, dass es ein * Duplikat ist. –