Salve a tutti, sto cercando di compilare il seguente codice in Java:
codice:
// CLASSE GENERICA FIGURA
public abstract class Figura {
//METODI ASTRATTI
public abstract double getArea();
public abstract double getPerimetro();
public boolean haAreaMaggiore(Figura altra) {
return this.getArea() > altra.getArea();
}
public boolean haPerimetroMaggiore(Figura altra) {
return this.getPerimetro() > altra.getPerimetro();
}
//CLASSE RETTANGOLO (ESTENSIONE DI FIGURA)
public class Rettangolo extends Figura {
//CAMPI
private double base, altezza;
//COSTRUTTORE
public Rettangolo(double x, double y) {
base = x;
altezza = y;
}
//METODI
public double getArea() {
return base * altezza;
}
public double getPerimetro() {
return 2 * (base + altezza);
}
public double getAltezza() {
return altezza;
}
public double getBase() {
return base;
}
public String toString() {
return "base = " + base + ", altezza = " + altezza;
}
public boolean equals(Rettangolo altro) {
return this.base == altro.base && this.altezza == altro.altezza;
}
public boolean equals(Object o) {
if (o instanceof Rettangolo) {
Rettangolo a = (Rettangolo) o;
return equals(a);
} else
return false;
}
public void cambiaBase(double x) {
base = x;
}
public void cambiaAltezza(double x) {
altezza = x;
}
}
//CLASSE QUADRATO (ESTENSIONE DI RETTANGOLO)
public class Quadrato extends Rettangolo {
//COSTRUTTORE
public Quadrato(double x) {
super(x, x); //ERRORE!!!
}
//METODI
public double getLato() {
return getBase();
}
public String toString() {
return "lato = " + getLato();
}
public void cambiaLato(double x) {
super.cambiaBase(x);
super.cambiaAltezza(x);
}
public void cambiaBase(double x) {
cambiaLato(x);
}
public void cambiaAltezza(double x) {
cambiaLato(x);
}
}
//CLASSE CERCHIO (ESTENSIONE DI FIGURA)
public class Cerchio extends Figura {
//CAMPI
private double r;
//COSTRUTTORE
public Cerchio(double raggio) {
r = raggio;
}
//METODI
public double getArea() {
return Math.PI * r * r;
}
public double getPerimetro() {
return 2 * Math.PI * r;
}
public boolean equals(Cerchio altro) {
return this.r == altro.r;
}
public boolean haAreaMaggiore(Cerchio altro) {
return this.getArea() > altro.getArea();
}
public boolean haPerimetroMaggiore(Cerchio altro) {
return this.getPerimetro() > altro.getPerimetro();
}
public double getRaggio() {
return r;
}
public String toString() {
return "raggio = " + getRaggio();
}
}
}
Alla riga indicata dal commento però, quando lancio il debug, Eclipse continua a restituirmi il seguente messaggio di errore:
"No enclosing instance of type Figura is available due to some intermediate constructor invocation"
Ho provato anche a compilare da Shell, ma il messaggio d'errore è molto simile (sempre alla stessa riga):
"Cannot reference this before supertype constructor has been called"
Qualcuno saprebbe darmi qualche consiglio?