2017-10-03 16 views
0

Pourquoi dois-je continuer à échouer à ce test?Besoin de définir une variable dans une classe qui est étendue à partir d'une autre classe. Ou remplacer le type

Cube Test (1.0, 1.0, 1.0) définit le type de "Cube",

largeur

, la longueur et la hauteur de chaque à 1,0 rétroaction de test

attendu: Cube, 1,0, 1,0, 1,0

vôtre: Rectangle, 1.0, 1.0, 1.0

j'ai besoin de la classe de cube pour être en mesure de définir son type de cube. En ce moment, il semble se mettre à Rectangle. Ma principale remplit un tableau de formes, j'ai alors des méthodes pour compter les différents types de formes en fonction du type de chaque forme. Comment puis-je définir Cube comme une forme, quand ma classe de rectangle étend déjà la forme, mais je DOIS avoir la classe Cube étendre le rectangle. Il doit parce que j'ai besoin d'avoir accès à la zone ainsi que la longueur et la largeur.

J'ai également une interface très simple qui est implémentée par mon cube. C'est juste pour trouver le volume. Puis-je en quelque sorte utiliser mon interface pour remplacer le type?

Impossible de trouver une réponse sur StackOverflow à cette question spécifique.

Voici ma classe Rectangle

public class Rectangle extends Shape { 
    protected double width; 
    protected double length; 

    public Rectangle(double width, double length) { 
     super("Rectangle"); 
     setWidth(width); 
     setLength(length); 
    }// end ctr 

    public final double getWidth () {return width; } 
    public final double getLength() {return length;} 

    public final void setWidth (double width) { 
     if (width < 0) { 
      System.out.println("Value could not be updated due to negative double."); 
     }else 
      this.width = width; 
    }// end width setter 

    public final void setLength (double length) { 
     if (length < 0) { 
      System.out.println("Value could not be updated due to negative double."); 
     }else 
      this.length = length; 
    }// end length setter 

    @Override 
    public double area() { 
     return length * width; 
    }// end area method 

    public double perimeter() { 
     return 2 * (length + width); 
    }// end perimeter method 

    @Override 
    public String toString() { 
     String str = ""; 

     str += String.format("%10s", "Rectangle:") + " "; 
     str += "width: " + String.format("%.1f", width) + ", " + "length: " + String.format("%.1f", length); 
     str += ", " + "area: " + String.format("%.2f", area()) + ", "; 
     str += "perimeter: " + String.format("%.2f", perimeter()); 

     return str; 
    }// end descriptor 

}// end rect class 

Voici ma classe Cube

public class Cube extends Rectangle implements Shape3D { 
    protected double height; 

    public Cube (double width, double length, double height) { 
     super(width, length); 
     setHeight(height); 
    }// end ctr 

    public final double getHeight() {return height;} // end get height 

    public final void setHeight (double height) { 
     if (height < 0) { 
      System.out.println("Value could not be updated due to negative double."); 
     }else 
      this.height = height; 
    }// end set height 

    @Override 
    public double volume() { 
     return super.area() * height; 
    } // end volume method 

    @Override 
    public String toString() { 
     String str = ""; 

     str += String.format("%10s", "Cube:") + " "; 
     str += "width: " + String.format("%.1f", width) + ", " + "length: " + String.format("%.1f", length); 
     str += ", " + "area: " + String.format("%.2f", area()) + ", "; 
     str += "perimeter: " + String.format("%.2f", perimeter()); 
     str += ", height: " + String.format("%.1f", height); 
     str += ", volume: " + String.format("%.1f", volume()); 

     return str; 
    }// end descriptor 
}// end cube class 

La classe Rectangle vient de ma classe Shape,

public abstract class Shape { 
    protected String type; 

    public Shape (String type) { 
     setType(type); 
    }// end ctr 

    public final String getType()   {return type;  } 
    public final void setType (String type) {this.type = type;} 

    public abstract double area(); // end prototype 

    public double getArea() {return area();} 

    @Override 
    public String toString() { 
     String str = ""; 

     str += type; 

     return str; 
    }// end descriptor 

}// end shape class 

Répondre

1

Votre classe cube utilise super pour appelle le constructeur du rectangle qui à son tour appelle le constructeur de la classe Shape avec la chaîne "Rectangle", comme vous l'avez, le constructeur du cube ne vous permettra pas de définir son type de cube. Vous devrez utiliser explicitement la méthode setType.

Vous pouvez dans le constructeur de cube ajoutez la ligne

this.setType("Cube"); 

et devrait travail (n'avez pas testé).

+0

Vous êtes un saint. Je suis coincé là-dessus pendant des heures. Il semble si évident maintenant .... comment l'ai-je négligé?!?! Gahh .... Donc frustré, mais tellement reconnaissant, merci monsieur. –