Originariamente inviata da
feded
Supponiamo di avere una classe e una sottoclasse che � estensione della prima (estends) quindi eredita i metodi, costruttore ecc...
Giusto solo un appunto: i costruttori non sono "membri" della classe e non vengono mai "ereditati". Questo è ben precisato nel Java Language Specification.
Originariamente inviata da
feded
Ma se io nella sottoclasse dichiaro un campo come final, come faccio ad inizializzarlo nella principale?
Esempio :
Ho la classe Figure e una sottoclasse triangolo.
Supponiamo che i lati del triangolo siano immutabili e io li dichiari con" final double " lato_a,lato_b,lato_c.
Ora nel main di Figure voglio dichiarare un oggetto di tipo triangolo e inizializzare il valore dei lati.
Come si fa ?
E perch� le variabili con cui definisco l'oggetto Figure mi viene detto dal compilatore di dichiararle come static ?
Esempio :
Tipo,perimetro e area sono comuni a tutte le sottoclassi di Figure (tutte le figure rientrano in una categoria o Tipo e hanno un'area e un perimetro).
Perché ho dovuto dichiarare le variabili come static ? ( mi obbligava il compilatore).
Le questioni sono poste "male", anche il fatto che il compilatore ti suggerisce o peggio obbliga a dichiararle static. (davvero ti "obbliga"?)
La questione è più semplice, vediamola così: vuoi fare una classe "base" Figura che contiene i campi perimetro e area "immutabili", perché tutte le figure hanno queste caratteristiche. Poi ad esempio sotto-classi Rettangolo, Cerchio, ecc...
Questo è quanto di "sensato" che si può fare:
codice:
public abstract class Figura {
private final double perimetro;
private final double area;
public Figura(double perimetro, double area) {
this.perimetro = perimetro;
this.area = area;
}
//... getPerimetro() e getArea() (NON i setter, ovviamente)
}
codice:
public class Rettangolo extends Figura {
private final double base;
private final double altezza;
public Rettangolo(double base, double altezza) {
super((base+altezza)*2, base*altezza);
this.base = base;
this.altezza = altezza;
}
//... getBase() e getAltezza() (NON i setter, ovviamente)
}
Originariamente inviata da
feded
Se vengono dichiarate come static non sono anche final ?
No sono due cose ben distinte. final sulle variabili vuol dire che il valore della variabile non può cambiare dopo la sua inizializzazione.