Instanzvariablen (auch Objektvariablen, Membervariablen oder Felder genannt) sind Variablen, die zu einem einzelnen Objekt gehören. Jedes Objekt einer Klasse besitzt seine eigene Kopie jeder Instanzvariable — der Zustand des einen Objekts ist dadurch unabhängig vom Zustand der anderen.
Ein Objekt, ein Zustand
Die Klasse ist der Bauplan, die Instanzvariable beschreibt, welche Daten ein Objekt trägt. Legt man zwei Konten an, hat jedes seinen eigenen Kontostand:
class Konto {
private double kontostand; // Instanzvariable: pro Konto-Objekt
public Konto(double start) {
this.kontostand = start; // this zeigt auf das aktuelle Objekt
}
}
Verändert man kontoA.kontostand, bleibt kontoB.kontostand unberührt. Genau diese Eigenschaft macht Objekte zu eigenständigen Bausteinen.
Initialisierung im Konstruktor
Instanzvariablen werden typischerweise im Konstruktor initialisiert. Dabei hilft this / self, den Parameter vom gleichnamigen Feld zu unterscheiden (this.kontostand = kontostand). In Python weist man Instanzvariablen üblicherweise in __init__ über self zu:
class Konto:
def __init__(self, start):
self.kontostand = start # Instanzvariable
Instanzvariable vs. lokale Variable
Eine lokale Variable lebt nur innerhalb einer Methode und ist nach deren Ende weg. Eine Instanzvariable gehört zum Objekt und existiert, solange das Objekt existiert. Für den Datentyp gelten dieselben Regeln wie bei jeder Variablen — entscheidend ist der Lebenszyklus.
Kapselung: privat halten
Instanzvariablen stehen zumeist hinter der Sichtbarkeit private und werden über Getter und Setter angesprochen. Das ist die Kapselung: Außenstehende sehen den Zustand nur kontrolliert, Invarianten lassen sich durchsetzen.
Der Gegenbegriff ist die Klassenvariable: Sie gehört nicht zum einzelnen Objekt, sondern zur Klasse und wird von allen Objekten geteilt.