O variabilă de instanță este o bucată de date din programarea orientată pe obiecte care are propria sa valoare unică pentru fiecare obiect în care se află. Variabilele de instanță pot fi, de asemenea, numite membri de instanță, câmpuri nestatice și membri de date. Ele reprezintă o parte importantă a majorității obiectelor, deținând anumite date pe care obiectul le folosește pentru calcul.
De exemplu, dacă există două obiecte, A și B, unde obiectul A are o variabilă de instanță numită „blah”, iar obiectul B are și o variabilă de instanță numită „blah”, cele două variabile „blah” sunt entități distincte. Fiecare variabilă este asociată cu obiectul care o încapsulează. Numele complet al variabilei „bla” asociată cu obiectul A este „A.blah”, în timp ce numele complet al variabilei „blah” asociată cu obiectul B este „B.blah”. Fiecare dacă aceste variabile pot avea propria sa valoare. Dacă obiectele A și B sunt de același tip și un alt obiect de acest tip, C, este creat și obiectul C va avea, de asemenea, o variabilă de instanță „blah”, care poate avea propria sa valoare unică.
Variabilele de instanță sunt adesea confundate cu variabilele statice, dar cele două sunt semnificativ diferite. Spre deosebire de variabilele de instanță, dintre care fiecare obiect de un anumit tip are propriul său, variabilele statice au o singură valoare, iar această valoare este aceeași pentru fiecare obiect de tipul corespunzător. Variabilele statice sunt adesea numite variabile de clasă, care nu sunt la fel cu variabilele de instanță.
În funcție de proprietățile de vizibilitate care le sunt atribuite, variabilele de instanță pot fi vizibile numai în interiorul unui anumit obiect, unui obiect și subclaselor sale sau obiectului în care se află, precum și oricăror alte obiecte. Acest tip final de vizibilitate, numit vizibilitate publică, este adesea considerat o practică proastă, de exemplu variabile, deoarece este ușor de încălcat principiile de încapsulare în programarea orientată pe obiecte. În ciuda acestui tabu, există momente în care variabilele de instanță publică sunt utile. De exemplu, multe clase standard în Java au variabile de instanță publice, care uneori permit modificarea ușoară a proprietăților.
Vizibilitatea unei variabile de instanță intră, de asemenea, în joc cu moștenirea. Dacă o clasă moștenește de la alta, acest lucru nu oferă imediat ambelor clase acces la variabilele de instanță ale celeilalte. Variabilele private de instanță din superclasă și subclasă rămân restricționate doar la acele clase, astfel încât o variabilă privată din subclasă nu poate fi văzută de superclasă și invers. Singurele variabile de instanță pe care atât superclasa, cât și subclasa le pot vedea sunt variabilele protejate din superclasă.