Wir können keine Objekte einer abstrakten Klasse erstellen, aber wir können eine Liste oder ein Array davon erstellen. Was ist der Unterschied?
6 Antworten
Eine Liste oder ein Array ist einfach ein Platzhalter für eine Reihe von Zeigern, und Sie haben noch KEINE Instanzen von irgendetwas erstellt.
Wenn Sie "Objekt erstellen" sagen, meinen Sie "Instanz erstellen", was mit einer abstrakten Klasse nicht möglich ist.
Sie können jedoch Listen oder Arrays erstellen, die auf diese verweisen (und leer sind). Anschließend können Sie die Zeiger auf "echte" Instanzen abgeleiteter Klassen / Objekte verschieben
Es ist möglich, eine Liste zu deklarieren und zu initialisieren, in der der Typ der Mitglieder eine abstrakte Klasse ist, da Sie zum Erstellen dieses Objekts die abstrakte Klasse nicht tatsächlich instanziieren müssen.
Logischerweise ist die Liste nur ein Container für Zeiger.
Sie können beispielsweise eine Liste einer abstrakten Klasse definieren, diese Liste kann jedoch am Anfang leer sein.
Sie können die Liste auch mit einer Anfangsgröße initialisieren, aber zu Beginn enthält sie keine Verweise auf tatsächliche Objekte: Bei der Initialisierung wird nur Platz für die Zeiger zugewiesen.
Die zur Liste hinzugefügten Objekte müssen Instanzen einer konkreten Klasse sein, die die abstrakte Klasse erweitert.
Ich glaube, Sie tippen einfach stark, was die Objekte innerhalb des Arrays sein werden
Wenn es also darum geht, instanziierte Objekte in das Array einzufügen. Es muss ein Objekt sein, das aus der abstrakten Klasse erweitert wurde
Das List
ist leer!
Das bedeutet, dass keine Instanz der Klasse abstract
vorhanden ist.
Wenn es also darum geht, instanziierte Objekte in das Array einzufügen. Es muss ein Objekt sein, das aus der abstrakten Klasse erweitert wurde
Es gibt keine rosa magischen Einhörner.
Aber Sie können immer noch einen Stall für rosa magische Einhörner bauen, Sie werden einfach nie in der Lage sein, dort hinein zu legen, weil es keine gibt.
Realistischere Analogie: Sie können nicht in die Tierhandlung gehen und "ein Säugetier" kaufen. Das ist viel zu abstrakt.
Aber Sie können einen Stall für Säugetiere bauen. Und dann können Sie Pferde, Kühe, Hunde, Katzen, Elefanten, Giraffen, Wölfe, Leoparden und Löwen kaufen und dort hineinlegen. Vielleicht sogar rosa magische Einhörner, wenn Sie welche finden können.
(Wie man einen Stall baut, der gleichzeitig Mäuse und Buckelwale aufnehmen kann, bleibt dem Leser als Übung überlassen.)
Nein, Sie können kein Array "von ihnen" erstellen, da Sie die abstrakten Typen nicht in die Liste aufnehmen können. Eine Liste eines abstrakten Typs enthält alle abgeleiteten Instanzen des abstrakten Typs.
Das Erstellen einer leeren Liste ist zulässig. Sie können (später) eine {{X0}} - Klasse hinzufügen, die sie erweitert.
Verwandte Fragen
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.