Frage Wann sollten abstrakte Klassen verwendet werden?


Hier ist der MSDN-Artikel auf abstrakte Klassenaber ich verstehe es wirklich nicht ...

Wann sollte ich wirklich abstrakte Klassen verwenden? Was sind die Vorteile von abstrakten Klassen?


75
2018-04-03 09:43


Ursprung


Antworten:


Abstrakte Klassen sind nützlich, wenn Sie eine Klasse zum Zwecke der Vererbung und des Polymorphismus benötigen, aber es macht keinen Sinn, die Klasse selbst zu instanziieren, nur ihre Unterklassen. Sie werden häufig verwendet, wenn Sie eine Vorlage für eine Gruppe von Unterklassen definieren möchten, die einen gemeinsamen Implementierungscode verwenden. Sie möchten jedoch auch sicherstellen, dass die Objekte der Oberklasse nicht erstellt werden können.

Nehmen wir zum Beispiel an, Sie müssen Hunde-, Katzen-, Hamster- und Fischobjekte erstellen. Sie besitzen ähnliche Eigenschaften wie Farbe, Größe und Anzahl der Beine sowie Verhalten, so dass Sie eine Animal Superklasse erstellen. Welche Farbe hat ein Tier? Wie viele Beine hat ein Animal-Objekt? In diesem Fall ist es nicht sinnvoll, ein Objekt vom Typ Animal zu instanziieren, sondern nur dessen Unterklassen.

Abstrakte Klassen haben auch den zusätzlichen Vorteil des Polymorphismus: Sie können den Typ der (abstrakten) Oberklasse als Methodenargument oder als Rückgabetyp verwenden. Wenn Sie beispielsweise eine PetOwner-Klasse mit einer train () -Methode hatten, können Sie sie als ein Objekt vom Typ Animal definieren, z. Trainieren (Animal a) im Gegensatz zum Erstellen einer Methode für jeden Untertyp von Animal.


127
2018-04-03 10:31



Durch die Verwendung abstrakter Klassen können wir die Klasse generischer machen.

Zum Beispiel: Wenn Klasse A eine abstrakte Klasse ist und Klassen B, Klasse C und Klasse D die abstrakte Klasse A enthalten, erben diese Unterklassen eine Methode, die bereits in der abstrakten Klasse A deklariert ist, wodurch die Methode allgemeiner wird.


5
2017-07-26 21:38



Sie verwenden sie für Klassen, die niemals erstellt werden (also effektiv nicht existieren), aber aus Gründen der Polymorphie von ihnen erben wollen.


4
2018-04-03 10:46



Verwenden Sie abstrakte Klassen, wenn Sie Verhalten für eine Klasse in Ihrer Klassenhierarchie definieren, die niemals verwendet wird, um ein Objekt direkt zu instanziieren.

Betrachten Sie sich für einen Moment als Gott. Ihre CBabyBoy- und CBanyGirl-Klassen sind nicht abstrakt - da es sich um solide Objekte handelt, die erstellt werden. Andererseits sollten Ihre CPerson- und CAnimal-Klassen abstrakt sein - sie sind aus Sicht der Typhierarchie nützlich, aber Sie werden nie ausgeführt CAnimal dingbat = new Animal();


3
2018-04-03 09:57



Richard hat ein Beispiel gegeben, bei dem eine abstact-Klasse Vorteile gegenüber nicht-abstrakten Klassen hat.

Ich möchte eine Faktentabelle hinzufügen, um zwischen einer abstrakten Klasse und einer Schnittstelle zu wählen. Das Bild kann gefunden werden Hier.

enter image description here


3
2018-02-23 22:09



Grundsätzlich sollten Sie eine abstrakte Klasse verwenden, wenn eine Entität in Ihrer Hierarchie logisch Methoden hat, von denen sie nicht wissen, wie sie implementiert werden sollen, aber ihre Nachkommen tun dies. Es gibt Milliarden von "echten" Beispielen im Web.


2
2018-04-03 09:49