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 det finns. Instansvariabler kan också kallas instansmedlemmar, icke-statiska fält och datamedlemmar. De är en viktig del av de flesta objekt och har specifika data som objektet använder för beräkning.
Om det exempelvis finns två objekt, A och B, där objekt A har en instansvariabel som kallas "bla", och objekt B också har en instansvariabel som kallas "bla", är de två "blah" -variablerna distinkta enheter. Varje variabel är associerad med objektet som kapslar in det. Det fullständiga namnet på variabeln "blah" som är associerad med objekt A är "A.blah", medan det fullständiga namnet på variabeln "blah" som är associerat med objektet 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 väsentligt olika. Till skillnad från instansvariabler, av vilka 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 desamma som instansvariabler.
Beroende på vilka synbarhetsegenskaper som tilldelats dem kan instansvariabler bara vara synliga inuti ett visst objekt, för ett objekt och dess underklasser eller för objektet i vilket det finns samt alla andra objekt. Den sista typen av synlighet, kallad allmän synlighet, anses ofta vara dålig praxis till exempel variabler, eftersom det är lätt att bryta mot inkapslingsprinciper i objektorienterad programmering. Trots detta tabu finns det tillfällen då variabler i allmän instans är användbara. Till exempel har många standardklasser i Java offentliga instansvariabler, som ibland möjliggör enkel ändring av egenskaper.
Synligheten för en instansvariabel spelar också in arv. Om en klass ärver från en annan ger detta inte omedelbart båda klasserna tillgång till varandras instansvariabler. Privata instansvariabler i superklass och underklass förblir begränsade till endast de klasserna, så en privat variabel i underklassen kan inte ses av superklassen, och vice versa. De enda instansvariablerna som både superklass och underklass kan se är skyddade variabler i superklass.