Hier ist der MSDN-Artikel über abstrakte Klassen , aber ich verstehe ihn wirklich nicht ...
Wann sollte ich wirklich abstrakte Klassen verwenden? Was sind die Vorteile der Verwendung von abstrakten Klassen?
Hier ist der MSDN-Artikel über abstrakte Klassen , aber ich verstehe ihn wirklich nicht ...
Wann sollte ich wirklich abstrakte Klassen verwenden? Was sind die Vorteile der Verwendung von abstrakten Klassen?
Antworten:
Abstrakte Klassen sind nützlich, wenn Sie eine Klasse zum Zwecke der Vererbung und des Polymorphismus benötigen. Es ist jedoch nicht sinnvoll, die Klasse selbst zu instanziieren, sondern 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, aber auch sicherstellen möchten, dass die Objekte der Oberklasse nicht erstellt werden können.
Angenommen, Sie müssen Objekte für Hunde, Katzen, Hamster und Fische erstellen. Sie besitzen ähnliche Eigenschaften wie Farbe, Größe und Anzahl der Beine sowie Verhalten, sodass Sie eine Tier-Superklasse erstellen. Welche Farbe hat ein Tier? Wie viele Beine hat ein Tierobjekt? In diesem Fall ist es nicht sehr sinnvoll, ein Objekt vom Typ Animal zu instanziieren, sondern nur seine 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 diese so definieren, dass sie ein Objekt vom Typ Animal aufnimmt, z. B. train (Animal a), anstatt für jeden Subtyp von Animal eine Methode zu erstellen.
Durch die Verwendung abstrakter Klassen können wir die Klasse allgemeiner gestalten.
Beispiel: Wenn Klasse A eine abstrakte Klasse ist und es Klassen Klasse B, Klasse C und Klasse D gibt, die die abstrakte Klasse A erweitern, erben diese Unterklassen eine Methode, die bereits in der abstrakten Klasse A deklariert ist, wodurch die Methode allgemeiner wird.
Verwenden Sie abstrakte Klassen, wenn Sie ein Verhalten für eine Klasse in Ihrer Klassenhierarchie definieren, das niemals zum direkten Instanziieren eines Objekts verwendet wird.
Betrachten Sie sich für einen Moment als Gott. Ihre CBabyBoy- und CBanyGirl-Klassen wären nicht abstrakt, da dies feste Objekte sind, die erstellt werden. Auf der anderen Seite wären Ihre CPerson- und CAnimal-Klassen abstrakt - sie sind aus Sicht der Typhierarchie nützlich, aber Sie werden nie ausgeführtCAnimal dingbat = new Animal();
Richard hat ein Beispiel geliefert, bei dem eine abstrakte 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 finden Sie hier .
Grundsätzlich sollten Sie eine abstrakte Klasse verwenden, wenn eine Entität in Ihrer Hierarchie logischerweise über Methoden verfügt, die nicht implementiert werden können, die Nachkommen jedoch. Es gibt Milliarden von "echten" Beispielen im ganzen Web, wirklich)