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?