Quote Originariamente inviata da feded Visualizza il messaggio
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.

Quote Originariamente inviata da feded Visualizza il messaggio
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)
}

Quote Originariamente inviata da feded Visualizza il messaggio
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.