Non stai utilizzando una variabile di istanza. Al contrario, nel costruttore stai dichiarando una nuova variabile locale che nasconde la variabile di istanza.
Tieni a mente bene i due concetti: dichiarazione e assegnazione.
Dichiarazione: la dichiarazione di una variabile consiste nell'indicazione del tipo seguito dall'indicazione del nome
codice:
int lato; // dichiaro una variabile di nome "lato" di tipo "intero"
Assegnazione: l'assegnazione consiste nell'indicazione di un nome di variabile, seguito dal segno "=" seguito dal valore che si intende assegnare a tale variabile
codice:
lato = 5; // Assegno ad una variabile di nome "lato" il valore intero 5
I campi di istanza si dichiarano fuori dai metodi, a livello della classe. Quello che hai fatto tu dentro al costruttore è dichiarare e contemporaneamente assegnare una nuova variabile, il cui nome è uguale a quello del campo di istanza. In questo modo, la variabile locale nasconde il campo di istanza (documentati sulle regole di scope). Tale variabile, è, appunto, una variabile locale che nasce nel costruttore e muore alla fine dell'esecuzione dello stesso.
Quello che avresti dovuto fare tu è questo:
codice:
public class Quadrato
{
public int lato;
public Quadrato(int l)
{
lato = l; // nota che non ho messo il tipo
}
...
}
Ciao.