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 pueden denominarse miembros de instancia, campos no estáticos y miembros de datos. Son una parte importante de la mayoría de los objetos y 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 al objeto que la encapsula. El nombre completo de la variable «blah» asociada con el objeto A es «A. blah», mientras que el nombre completo de la variable «blah» 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 el suyo, las variables estáticas tienen solo un valor, y este valor es el mismo para todos los objetos 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 que se les asignen, las variables de instancia pueden ser visibles solo dentro de un objeto en particular, para un objeto y sus subclases, o para el objeto en el que reside, así como 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 ocasiones en las que las variables de instancia pública son útiles. Por ejemplo, muchas clases estándar en Java tienen variables de instancia públicas, 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 subclase permanecen restringidas solo a esas clases, por lo que una variable privada en la subclase no puede ser vista por la superclase, y viceversa. Las únicas variables de instancia que pueden ver tanto la superclase como la subclase son las variables protegidas en la superclase.