KILLERIX ha scritto:
P.s. Sto studiando Java all'università ma in 10 lezioni ha spiegato il mondo e ora vuole che facciamo due giochi in 10 gg.... Troppo ho imparato per nn aver mai fatto java xD
Ok .. ok, allora un minimo di spiegazione.
Es.
public class TriangoloIsoscele {
private double base;
private double altezza;
public TriangoloIsoscele(double base, double altezza) {
this.base = base;
this.altezza = altezza;
}
public double calcolaArea() {
return base * altezza / 2; // usa le variabili di istanza
}
}
Le variabili di "istanza" sono:
private double base;
private double altezza;
Sono nella classe ma fuori da costruttori/metodi e non sono static (se fossero static sarebbero variabili "di classe", globali, associate alla classe e non a ciascun oggetto della classe).
Il costruttore riceve due parametri. I nomi dei parametri potrebbero essere qualunque 'b', 'a' ecc... Per convenzione, si usano generalmente gli stessi nomi dei campi (le variabili di istanza). Anche per non doversi "inventare" nomi differenti e che potrebbero poi confondere di più.
Dal momento che nel costruttore il parametro ha lo stesso nome del campo, il parametro si dice che
nasconde (shadowing) il campo. Per questo motivo, per riferirsi al campo si
deve usare this.base e this.altezza.
Le variabili di istanza le ho messe 'private', vuol dire che sono accessibili solo dall'interno della classe e non anche dall'esterno. Anche questa è una buona convenzione e principio fondamentale: quello di tenere nascosto lo stato interno degli oggetti e rendere disponibili invece soltanto i metodi atti ad operare in modo appropriato sullo stato dell'oggetto.
Le variabili di istanza sono distinte per ciascuna istanza (oggetto) della classe. Se da qualche altra parte fai:
TriangoloIsoscele tri1 = new TriangoloIsoscele(10, 5);
TriangoloIsoscele tri2 = new TriangoloIsoscele(6, 4);
Hai 2 oggetti,
ciascuno ha le sue variabili di istanza base/altezza. Quindi l'oggetto referenziato da tri1 si tiene 10 e 5 e mentre l'oggetto referenziato da tri2 mantiene 6 e 4.
Le variabili di istanza sono usabili da tutti i metodi di istanza della classe, come quel calcolaArea. Lì non è obbligatorio usare this perché non ci sono altre variabili che "nascondono" i campi.
Se fai:
System.out.println(tri1.calcolaArea()); // stampa 25.0
System.out.println(tri2.calcolaArea()); // stampa 12.0
Ti è più chiaro ora? Purtroppo però .... credo ti manchino molte altre nozioni .....