Wir können keine Objekte einer abstrakten Klasse erstellen, aber wir können eine Liste oder ein Array davon erstellen. Was ist der Unterschied?

12
What 25 Dez. 2015 im 22:26

6 Antworten

Beste Antwort

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

15
Grantly 25 Dez. 2015 im 19:40

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.

6
Marco Altieri 25 Dez. 2015 im 19:42

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

2
DaveTheRave 25 Dez. 2015 im 19:45

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

2
Venkat.R 25 Dez. 2015 im 20:45

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.)

2
Jörg W Mittag 26 Dez. 2015 im 15:36

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.

0
Keith Nicholas 25 Dez. 2015 im 19:38