All'interno della definizione di una classe
qualifica i membri di dati all'interno della medesima,
e allo stesso tempo evita il fraintendimento com i membri
omonimi che si trovano sull'intestazione di un metodo
all'interno della classe.
es:
this.mioDato e' il dato privato della classe.codice:public class MyClass{ private int mioDato; //costruttori .... //metodi public void setDato(int mioDato){ this.mioDato = mioDato; } public int getDato(){ return mioDato;//per default this.mioDato } }
mioDato e'il mezzo di comunicazione con l'esterno
che si trova appunto nella signature del metodo:
public void setDato(int mioDato){...}.
Di solito e' il compilatore che inserisce this
per qualificare i membri pero' in caso di omonimia,
se non si specifica this,
si hanno i seguenti problemi:
Adesso se creo un'istanza dell classe MyClass:codice:public class MyClass{ private int mioDato; //costruttori .... //metodi public void setDato(int mioDato){ mioDato = mioDato;//il compilatore fa: this.mioDato = this.miodato } public getDato(){ return mioDato; } }
Questo e' dovuto al fatto che in fase di instanzazionecodice:.... MyClass ogg = new MyClass(); ogg.setDato(5); System.out.println(ogg.getDato());//visualizza 0(zero)!! ...
...= new MyClass();
mioDato all'interno della classe, non quello della signature del metodo, viene automaticamente inizializzato a zero.
Poi in fase di settaggio del dato mediante il metodo setDato(), se non hai inserito this riassegni lo stesso
valore di inizializzazione.
Quindi quando hai omonimia tra variabile della signature del
metodo e un membro della classe devi inserire this
per qualificare il membro di classe, anche se il compilatore
non ti impedisce di compilare il tutto.
Ciao
![]()

Rispondi quotando