Ciao, apro questa discussione per non sfruttare quella già aperta ed avere così tutti i dubbi relativi al codice in un'unica discussione.
1) Ho studiato il paragrafo relativo ai costruttori e non mi è chiara una cosa. Allora, partiamo innanzitutto dal fatto che se in una classe non dichiaro un costruttore automaticamente il compilatore ne crea uno in automatico. Io però non ho capito in che caso noi dobbiamo andare a creare un costruttore che prende in input un parametro. Mi sono dato una risposta ma non so se è corretta. Per caso nel momento in cui noi vogliamo andare ad inizializzare le variabili d'istanza con dei valori precisi nel momento in cui si crea l'oggetto della classe?
2) In un esercizio ho creato questo costruttore:
codice:
public Quadrato(int lato)
{
int perimetro = lato * 4;
int area = lato * lato;
System.out.println("il perimetro è: " + perimetro);
System.out.println("l'area è: " + area);
}
e il codice non genera errori però se per le variabili locali "perimetro" e "area" aggiungo il modificatore public mi da come errore "illegal start of expression".
Non è possibile inserire il modificatore perchè in automatico viene considerato quello del metodo (un costruttore in questo caso)?
3) Un altro esercizio chiede la costruzione della classe TestQuadrato contenente un metodo main() che istanzi un oggetto di tipo Quadrato con lato di valore 5. Successivamente bisogna stampare perimetro e area dell'oggetto appena creato.
La mia soluzione è la seguente:
codice:
public class TestQuadrato
{
public static void main(String args[])
{
Quadrato oggetto = new Quadrato(5);
}
}
codice:
public class Quadrato
{
public int lato;
public Quadrato(int lato)
{
int perimetro = lato * 4;
int area = lato * lato;
System.out.println("il perimetro è: " + perimetro);
System.out.println("l'area è: " + area);
}
}
mentre la soluzione proposta dal manuale è questa:
codice:
public class TestQuadrato {
public static void main(String args[]) {
Quadrato quadrato = new Quadrato();
quadrato.lato = 5;
int perimetro = quadrato.perimetro();
System.out.println(perimetro);
int area = quadrato.area();
System.out.println(area);
}
}
codice:
public class Quadrato {
public int lato;
public int perimetro() {
int perimetro = lato * 4;
return perimetro;
}
public int area() {
int area = lato * lato;
return area;
}
}
La mia soluzione funziona però vorrei capire se concettualmente è più corretto fare le "operazioni" all'interno del metodo main (come fatto nella soluzione proposta dal manuale) oppure all'interno del costruttore (come fatto da me).
4) Non riesco a capire perchè creando una variabile d'istanza e utilizzandola nel costruttore in questo modo
codice:
public class Quadrato
{
public int lato;
public Quadrato(int l)
{
int lato = l;
}
...
il programma non funziona, o meglio mi restituisce 0 come valore, mentre se nel corpo del costruttore tolgo "int" e quindi scrivo l'istruzione "lato = l;" al posto di "int lato = l;" funziona correttamente.
Se non erro l'errore viene dal fatto che nei metodi successivi ("perimetro" e "area") il compilatore prende in considerazione non la variabile inizializzata dal costruttore ma quella creata all'inizio che appunto è inizializzata di default a 0 essendo un intero. Io però non capisco perchè definendo il tipo le cose non vadano come dovrebbero.