Vad är en instansvariabel?

En instansvariabel är en bit data i objektorienterad programmering som har sitt eget unika värde för varje objekt där den finns. Instansvariabler kan också kallas instansmedlemmar, icke-statiska fält och datamedlemmar. De är en viktig del av de flesta objekt och innehåller specifika data som objektet använder för beräkning.
Till exempel, om det finns två objekt, A och B, där objekt A har en instansvariabel som heter ”bla” och objekt B också har en instansvariabel som heter ”bla”, är de två ”bla”-variablerna distinkta enheter. Varje variabel är associerad med objektet som kapslar in den. Det fullständiga namnet på variabeln ”blah” som är associerad med objekt A är ”A.blah”, medan det fullständiga namnet på variabeln ”blah” associerad med objekt B är ”B.blah.” Var och en om dessa variabler kan ha sitt eget värde. Om objekt A och B är av samma typ, och ett annat objekt av den typen, C, skapas, och objekt C kommer också att ha en instansvariabel ”bla”, som kan ha sitt eget unika värde.

Instansvariabler förväxlas ofta med statiska variabler, men de två är signifikant olika. Till skillnad från instansvariabler, där varje objekt av en viss typ har sina egna, har statiska variabler bara ett värde, och detta värde är detsamma för varje objekt av lämplig typ. Statiska variabler kallas ofta klassvariabler, som inte är samma som instansvariabler.

Beroende på synlighetsegenskaperna som tilldelats dem, kan instansvariabler endast vara synliga inuti ett visst objekt, för ett objekt och dess underklasser, eller för objektet där det finns såväl som andra objekt. Den sista typen av synlighet, som kallas offentlig synlighet, anses ofta vara dålig praxis för till exempel variabler, eftersom det är lätt att bryta mot inkapslingsprinciper i objektorienterad programmering. Trots detta tabu finns det tillfällen då offentliga instansvariabler är användbara. Till exempel har många standardklasser i Java publika instansvariabler, vilket ibland möjliggör enkel modifiering av egenskaper.

Synligheten av en instansvariabel spelar också in med arv. Om en klass ärver från en annan ger detta inte omedelbart båda klasserna tillgång till varandras instansvariabler. Privata instansvariabler i superklassen och underklassen förblir begränsade till endast dessa klasser, så en privat variabel i underklassen kan inte ses av superklassen, och vice versa. De enda instansvariablerna som både superklassen och underklassen kan se är skyddade variabler i superklassen.