C'è qualcuno di così gentile che spiega un attimo cosa rappresenta 'this' nel seguente esempio ?
Grazie
codice:public Veicolo() { this(50, 4); // costruttore } public void setVal(int val) { this.val = val; }
C'è qualcuno di così gentile che spiega un attimo cosa rappresenta 'this' nel seguente esempio ?
Grazie
codice:public Veicolo() { this(50, 4); // costruttore } public void setVal(int val) { this.val = val; }
significa che vai a richiamare un altro costruttore della stessa classe passando i parametri indicati.
In genere this cmq fa riferimento alla classe corrente
Nella stessa classe dovrebbe esserci un secondo costruttore tipo:Originariamente inviato da JANUS70
C'è qualcuno di così gentile che spiega un attimo cosa rappresenta 'this' nel seguente esempio ?
Grazie
codice:public Veicolo() { this(50, 4); // costruttore } public void setVal(int val) { this.val = val; }
e con l'istruzione this.(50, 4); vai a richiamare proprio tale costruttore.codice:public Veicolo(int a, int b) { .... }
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
in sostanza sarebbe così .. ?
codice:class Veicolo { private int VelocitaMassima; private int NumeroPosti; public Veicolo(int VM, int NP) { VelocitaMassima = VM; NumeroPosti = NP; } public Veicolo() { this(50, 4); } public void setVal(int val) { this.val = val; } }
.. e "this.val = val;" ?
Grazie
la sostanza è sempre quella: this si riferisce all'istanza corrente.Originariamente inviato da JANUS70
.. e "this.val = val;" ?
in questo caso c'è una ridondanza di nomi.codice:public void setVal(int val){ this.val = val; }
val --> si riferisce alla variabile locale (parametro) val
this.val --> si riferisce alla variabile di classe val
scusa ..
per variabile di classe si intende proprietà di classe ?
ma se così fosse nell'esempio precedente 'val' rappresenterebbe quindi 'VelocitaMassima' o 'NumeroPosti' ..
proprietà che vengono valorizzate dal costruttore, 'val' del metodo 'setVal' viene valorizzato
dal paramentro passato in input ..
che senso avrebbe fare 'this.val = val;' ?
grazie
queste sono logiche del programmatore, non posso spiegarti io (o altri) cosa ha in testa chi scrive un programma!!
In ogni caso, per variabile di classe intendo proprietà di classe.
questo è un esempio di modellizzazione classe.codice:public class Veicolo{ private int velocitaMassima; private int numeroPosti; public Veicolo(){ this (20, 5); } public Veicolo (int velocitaMassima, int numeroPosti){ this.velocitaMassima = velocitaMassima; this.numeroPosti = numeroPosti; } public void setVelocitaMassima(int velocitaMassima){ this.velocitaMassima = velocitaMassima; } public void setNumeroPosti(int numeroPosti){ this.numeroPosti = numeroPosti; } public int getNumeroPosti(){ return numeroPosti; } public int getVelocitaMassima(){ return velocitaMassima; } }
Allora in genere per il principio di encapsulation i campi si dichiarano private e si fanno metodi accessori come get/set per poter accedere ai valori in modo controllato. Mi fermo qui che potremmo scrivere un trattato su pro e contro di questo.
In generale (per pigrizia direi) in questi casi tendi a dare lo stesso nome della variabile al parametro. L'operatore this ti consente di distinguere lo scope del nome che usi.
this.nome --> proprietà della classe
nome --> parametro
con this.velocitaMassima = velocitaMassima;
stai dicendo
assegna il valore che ti passo come parametro (velocitaMassima) alla variabile della classe velocitaMassima.
se tu avessi scritto
e non avresti usato this.codice:public void setVelocitaMassima(int vel){ velocitaMassima = vel; }
Il this nel costruttore penso ce l'hai chiaro.
Non farti ingannare dal fatto che valorizzo una proprietà nel costruttore. Tu dai un modo per accedere dall'esterno ai tuoi campi, per evitare in questo caso di settare la velocità solo alla costruzione della classe. Nulla ti vieta, per i tuoi scopi, di no fare getter e setter (quindi di dare un solo punto di accesso), ma ripeto dipende dal programma che fai, non è il caso generale
mi sembra tutto abbastanza chiaro ..![]()
grazie mille