4 Stimmen

Leistung der Vererbung abstrakter und normaler Klassen

Wenn Sie von einer Klasse ableiten und die Unterklasse instanzieren, instanziert die Laufzeit auch die Oberklasse, richtig?

Da abstrakte Klassen nicht instanziert werden können, werden sie nicht von der Laufzeit erstellt, wenn eine Unterklasse instanziert wird?

Wenn ja, dann würde abstrakte Klasse Vererbung schneller als normale Klasse Instanz sein?

12voto

Jon Skeet Punkte 1325502

Die Laufzeitumgebung erzeugt niemals getrennte Instanzen der Basisklasse und der abgeleiteten Klasse - es ist nur so, dass die Instanz der abgeleiteten Klasse hat auch alle Variablen usw. der Basisklasse und führt den Konstruktor der Basisklasse als Teil der Initialisierung aus. Hier gibt es keinen Unterschied zwischen "normalen" Basisklassen und abstrakten Basisklassen.

8voto

Lasse V. Karlsen Punkte 364542

Ich glaube, Sie haben einige Details verwechselt.

Wenn Sie ein Objekt konstruieren, dessen Klasse von einer anderen Klasse erbt, ist es nicht so, dass Sie zwei Objekte im Speicher haben.

Sie bekommen nur eine, aber die hat Platz für Felder, die von beiden kommen.

Anders ausgedrückt: Wenn die ursprüngliche Klasse 10 Byte für ihre Felder benötigt und Ihre geerbte Klasse 5 Byte für ihre spezifischen Felder, dann würde ein Objekt, das Sie aus Ihrer geerbten Klasse konstruieren, 15 Byte belegen, wobei die ersten 10 Byte den Feldern der Basisklasse entsprechen. (Hinweis: Dies ist eine sehr vereinfachte Erklärung, es gibt noch viel mehr Faktoren, die die tatsächliche Größe von Objekten bestimmen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X