¿Qué es una variable de instancia?
Una variable de instancia es un dato en la programación orientada a objetos que tiene su propio valor único para cada objeto en el que reside. Las variables de instancia también se pueden llamar miembros de instancia, campos no estáticos y miembros de datos. Son una parte importante de la mayoría de los objetos, ya que contienen datos específicos que el objeto utiliza para el cálculo.
Por ejemplo, si existen dos objetos, A y B, donde el objeto A tiene una variable de instancia llamada "bla", y el objeto B también tiene una variable de instancia llamada "bla", las dos variables "bla" son entidades distintas. Cada variable está asociada con el objeto que la encapsula. El nombre completo de la variable "bla" asociada con el objeto A es "A.blah", mientras que el nombre completo de la variable "bla" asociada con el objeto B es "B.blah". Cada una de estas variables puede tener su propio valor. Si los objetos A y B son del mismo tipo, y se crea otro objeto de ese tipo, C, y el objeto C también tendrá una variable de instancia "bla", que puede tener su propio valor único.
Las variables de instancia a menudo se confunden con variables estáticas, pero las dos son significativamente diferentes. A diferencia de las variables de instancia, de las cuales cada objeto de un tipo particular tiene sus propias variables estáticas tienen solo un valor, y este valor es el mismo para cada objeto del tipo apropiado. Las variables estáticas a menudo se denominan variables de clase, que no son lo mismo que las variables de instancia.
Dependiendo de las propiedades de visibilidad asignadas a ellas, las variables de instancia pueden ser visibles solo dentro de un objeto particular, a un objeto y sus subclases, o al objeto en el que reside, así como a cualquier otro objeto. Ese tipo final de visibilidad, llamado visibilidad pública, a menudo se considera una mala práctica para las variables de ejemplo, porque es fácil violar los principios de encapsulación en la programación orientada a objetos. A pesar de este tabú, hay momentos en que las variables de instancia pública son útiles. Por ejemplo, muchas clases estándar en Java tienen variables de instancia pública, lo que a veces permite una fácil modificación de las propiedades.
La visibilidad de una variable de instancia también entra en juego con la herencia. Si una clase hereda de otra, esto no da acceso inmediato a ambas clases a las variables de instancia de la otra. Las variables de instancia privadas en la superclase y la subclase permanecen restringidas solo a esas clases, por lo que la superclase no puede ver una variable privada en la subclase, y viceversa. Las únicas variables de instancia que pueden ver tanto la superclase como la subclase son las variables protegidas en la superclase.