Co to jest zmienna instancji?

Zmienna instancji to fragment danych w programowaniu obiektowym, który ma swoją unikalną wartość dla każdego obiektu, w którym się znajduje. Zmienne instancji mogą być również nazywane składowymi instancji, polami niestatycznymi i składowymi danych. Są ważną częścią większości obiektów, przechowują określone dane, których obiekt używa do obliczeń.
Na przykład, jeśli istnieją dwa obiekty, A i B, gdzie obiekt A ma zmienną instancji o nazwie „blah”, a obiekt B ma również zmienną instancji o nazwie „blah”, te dwie zmienne „blah” są odrębnymi bytami. Każda zmienna jest powiązana z obiektem, który ją hermetyzuje. Pełna nazwa zmiennej „blah” powiązanej z obiektem A to „A.blah”, natomiast pełna nazwa zmiennej „blah” powiązanej z obiektem B to „B.blah”. Każda z tych zmiennych może mieć swoją własną wartość. Jeśli obiekty A i B są tego samego typu i tworzony jest inny obiekt tego typu, C, a obiekt C również będzie miał zmienną instancji „blah”, która może mieć własną unikalną wartość.

Zmienne instancji są często mylone ze zmiennymi statycznymi, ale te dwie istotnie się różnią. W przeciwieństwie do zmiennych instancji, których każdy obiekt określonego typu ma swój własny, zmienne statyczne mają tylko jedną wartość i ta wartość jest taka sama dla każdego obiektu odpowiedniego typu. Zmienne statyczne są często nazywane zmiennymi klasowymi, które nie są tym samym co zmienne instancji.

W zależności od przypisanych im właściwości widoczności, zmienne instancji mogą być widoczne tylko wewnątrz konkretnego obiektu, dla obiektu i jego podklas lub dla obiektu, w którym się on znajduje, jak również wszelkich innych obiektów. Ten ostatni rodzaj widoczności, zwany widocznością publiczną, jest często uważany za złą praktykę, na przykład zmienne, ponieważ łatwo jest naruszyć zasady enkapsulacji w programowaniu obiektowym. Pomimo tego tabu, zdarzają się sytuacje, w których przydatne są zmienne instancji publicznych. Na przykład wiele standardowych klas w Javie posiada publiczne zmienne instancji, co czasami pozwala na łatwą modyfikację właściwości.

Widoczność zmiennej instancji również wchodzi w grę z dziedziczeniem. Jeśli jedna klasa dziedziczy po innej, nie daje to natychmiast obu klasom dostępu do zmiennych instancji drugiej. Zmienne instancji prywatnych w nadklasie i podklasie pozostają ograniczone tylko do tych klas, więc zmienna prywatna w podklasie nie może być widziana przez nadklasę i na odwrót. Jedynymi zmiennymi instancji, które mogą zobaczyć zarówno nadklasa, jak i podklasa, są chronione zmienne w nadklasie.