Was ist die genaue Verwendung einer abstrakten Klasse? Ist es nicht möglich, in einer gewöhnlichen Klasse die gleichen Dinge zu tun wie in einer abstrakten Klasse?Exakte Verwendung der abstrakten Klasse
Antwort
Eine abstrakte Klasse wird verwendet, wenn Sie einige Basisfunktionen, die Sie Subklassen erben wollen, aber es wäre nicht sinnvoll, die Basisklasse zu instanziieren. Wenn Sie beispielsweise eine Shape-Basisklasse haben, könnten Sie über eine eingebaute Implementierung verfügen, die von Unterklassen verwendet werden kann, sowie über Schnittstellenmethoden, die von den Unterklassen implementiert werden sollen. Es wäre jedoch wahrscheinlich nicht sinnvoll, ein Shape-Objekt zu erstellen. Eine abstrakte Klasse gibt Ihnen diese Funktionalität. Ein weiteres großartiges Beispiel für abstrakte Klassenanwendungen ist die abstract factory pattern.
Verwenden Sie eine abstrakte Klasse, um eine konkrete Implementierung bereitzustellen, die Instanziierung jedoch nicht zuzulassen. Sie können immer eine gewöhnliche Klasse instanziieren, die keinen Sinn ergibt, wenn sie nicht alleine stehen kann. Gleichzeitig ist eine Schnittstelle möglicherweise nicht ausreichend, wenn es eine konkrete Implementierung gibt, die in allen implementierenden Klassen identisch ist. Eine abstrakte Klasse ist gerade genug.
- Schnittstelle: Vertrag nur, keine Implementierung, keine Instantiierung
- Abstrakte Klasse: Vertrag, einige Implementierung, keine Instantiierung
- Klasse: Vertrag, Implementierung, Instanziierung
wie es möglich ist, Vertrag in der dritten, Klasse. weil Vertrag bedeutet die Deklaration dieser Methode, das heißt "abstrakt". Und der Compiler zwingt zur Umwandlung in die abstrakte Klasse Deshalb ist es möglich, in der normalen Klasse zu kontrahieren. Wenn meine Logik falsch ist, bitte mich richtig. – devsda
Im Gegensatz zu normalen Klassen, abstract
Klassen können abstract
Methoden enthalten. Sie verhalten sich ähnlich wie Interface-Mitglieder.
der Zwischenzeit können sie so ziemlich alles andere tun, dass regelmäßige Klassen tun können: sie können Methoden implementieren, enthalten Felder & verschachtelte Typen, von einer anderen Klasse abgeleitet sind, usw.
Reguläre Klassen, die Sie benötigen Implementierungen für alle zu schaffen, Methoden.
Schnittstellen erfordern Sie nicht bieten alle Implementierungen für alle Methoden.
Abstrakte Klassen sind der einzige Klassen-Typ, der es Ihnen ermöglicht, Methoden zu verwenden, die eine Implementierung enthalten, und Methoden zu verwenden, die keine Implementierung bereitstellen, aber eine vererbende Klasse benötigen.
Die Tatsache, dass Sie Methoden ohne Implementierung hinzufügen dürfen ist der Grund, warum Sie nicht eine abstrakte Klasse instanziiert können: Sie können nur etwas instanziiert, die Implementierungen für alle Methoden hat.
- 1. Szenarien für die Verwendung der abstrakten Klasse und Interface-Klasse
- 2. Array der abstrakten Klasse
- 3. Verwendung der abstrakten Decorator-Klasse im Decorator-Muster
- 4. Jaxb -Unmarshalling der abstrakten Liste in der abstrakten Klasse
- 5. Array-Liste der abstrakten Klasse?
- 6. Was ist der Unterschied zwischen Objekt einer abstrakten Klasse und Liste von Objekten der abstrakten Klasse?
- 7. Serialisierung einer abstrakten Klasse
- 8. Instanz einer abstrakten Klasse
- 9. Abstrakte Klasse mit abstrakten Generika?
- 10. Partielle Methode innerhalb der abstrakten Klasse (C#)
- 11. Funktion Anmerkung für Unterklassen der abstrakten Klasse
- 12. Testen der abstrakten Klasse Konkrete Methoden
- 13. Implementierung der abstrakten Klasse ohne Template-Argument
- 14. Anmerkungen von der abstrakten Klasse übernehmen?
- 15. Java - Binärkompatibilität der abstrakten Klasse und Unterklassen
- 16. Verspotten einer generischen Klasse mit einer abstrakten Version der Klasse
- 17. Was ist die Hauptmethode in der abstrakten Klasse?
- 18. Verwendung von Generika in abstrakten Klassen
- 19. Überschreiben der abstrakten Methode in der partiellen Klasse
- 20. Handhabung Klassen inhärent von der abstrakten Klasse und Typ-Parameter
- 21. Methode mit einer abstrakten Klasse als Parameter
- 22. Unterschied zwischen abstrakten Klasse und Trait
- 23. Warum überspringt Mockito die Initialisierung der Membervariablen meiner abstrakten Klasse
- 24. Wie man zu einer abstrakten Klasse von der Erweiterung
- 25. Deklaration einer Methode als optional in der abstrakten Klasse
- 26. InstantiationException während der abstrakten Klasse auf Android erstreckt
- 27. instanziieren Objekt der abstrakten Klasse mit generischen Typ
- 28. Relevanz des 'öffentlichen' Konstruktors in der abstrakten Klasse
- 29. Initialisierung statischer Variablen in der abstrakten Klasse und Unterklasse
- 30. So implementieren Sie die Erweiterungsmethode in der abstrakten Klasse
Siehe: http://stackoverflow.com/questions/56867/interface-vs-base-class –
Werfen Sie einen Blick auf [Template Method Design Pattern] (http://sourcemaking.com/design_patterns/template_method) Ich denke abstrakte Klasse ist dort nicht ersetzbar. – rafek