2016-04-11 49 views
7

Per la classe Cube, sto cercando di eliminare l'errore:Lavorare con eccellente in java

Cube.java:12: error: constructor Rectangle in class Rectangle cannot be applied to given types; 
    super(x, y); 
    ^
    required: int,int,double,double 
    found: int,int....... 

So ogni faccia di un cubo è un rettangolo la cui lunghezza e necessità la larghezza di essere lo stesso di il lato di un cubo, ma non sono sicuro di cosa debba essere passato al costruttore di Rectangle per fare in modo che la sua lunghezza e larghezza siano le stesse del lato di un cubo.

cercando anche di calcolare il volume che è la zona dei tempi rettangolo la lunghezza dei cubi lati

Questa è la classe Cube

// --------------------------------- 
// File Description: 
// Defines a Cube 
// --------------------------------- 

public class Cube extends Rectangle 
{ 


    public Cube(int x, int y, int side) 
    { 
    super(x, y); 
    side = super.area(); // not sure if this is right 
    } 


    public int getSide() {return side;} 

    public double area()  {return 6 * super.area();} 
    public double volume() {return super.area() * side;} 
    public String toString() {return super.toString();} 
} 

e questa è la classe Rectangle

// --------------------------------- 
// File Description: 
// Defines a Rectangle 
// --------------------------------- 

public class Rectangle extends Point 
{ 
    private int x, y; // Coordinates of the Point 
    private double length, width; 

    public Rectangle(int x, int y, double l, double w) 
    { 
    super(x, y); 
    length = l; 
    width = w; 
    } 

    public int  getX()   {return x;} 
    public int  getY()   {return y;} 
    public double getLength() {return length;} 
    public double getWidth()  {return width;} 

    public double area()  {return length * width;} 
    public String toString() {return "[" + x + ", " + y + "]" + " Length = " + length + " Width = " + width;} 
} 
+3

Dal 'Rectangle' non ha un costruttore che prende 2 argomenti, quale codice si aspetta di essere chiamato quando si richiama' super (x, y); '? – azurefrog

+1

Sei sicuro che il 'Cube' debba ereditare da' Rectangle' e non tenere semplicemente una matrice di 'Rectangles', ognuno con il proprio' Punto 'e lunghezza? Inoltre, poiché 'Rectangle' estende' Point', non è necessario definire 'x',' y', 'getX' o' getY' in 'Rectangle' - ereditate queste proprietà. –

risposta

10

La stessa costruzione di questo oggetto sembra mancare all'idea di estensione.

A Cube non è un Rectangle. Un Cube può essere considerato un composito di più Rectangle s con dati spaziali per l'orientamento, ma i rettangoli devono essere membri (leggi attributi/campi) di Cube.

Per illustrare questo punto considerare la differenza tra le seguenti affermazioni.

Tutti i cubi sono rettangoli.

Tutti i gatti sono animali.

è possibile creare un oggetto Cat che estende la super classe Animal. Cube s e Rectangle s non condividono questa relazione.

considerano refactoring il codice di essere qualcosa di simile:

public class Cube { 
    private List<Rectangle> faces: 

    .... 

} 

a prendere questo un ulteriore passo avanti, non tutti i Rectangle s sono Point s.

Un punto è una coppia di coordinate x, y. Per disegnare con precisione una Rectangle la quantità minima di informazioni richieste è di due Point s.

vedere

+-- 
| | 
--+ 

Se avete l'angolo opposto Point s (segnati qui dal +) è possibile disegnare la Rectangle.

Alla luce di questo, forse si dovrebbe anche refactoring Rectangle per avere un paio di Point s come membri.

qualcosa di simile:

public class Rectangle { 
    private Point firstCorner; 
    private Point secondCorner; 

    ... 
} 
3

Il problema è che il costruttore Rectangle prevede 4 argomenti e che si sta passando solo a 2 quando si crea l'istanza di Cube. Si dovrebbe passare la lunghezza anche:

public Cube(int x, int y, int side) 
    { 
    super(x, y, side, side); 
    } 

Se si pensa che un po 'ha perfettamente senso - ogni rettangolo ha bisogno di origine X e Y, e la larghezza e l'altezza. In caso di larghezza e altezza del cubo sono uguali, ma dovresti comunque dire al rettangolo quali sono i loro valori;)

2

Il numero di argomenti nel tuo super(x, y) non corrisponde agli argomenti nel costruttore della classe Rectangle. Quando invochi esplicitamente un costruttore di super-classe, devi assicurarti che la super-classe abbia un costruttore che corrisponde.

2

La superclasse di Rectangle è Cube non Point. Usando super() puoi chiamare il costruttore di non il costruttore di Point