2016-08-30 2 views
-1

Ich habe 2 Klassen von Formen ist ein Rechteck und der zweite ist Kreis, beide erweitern "Form" -Klasse.Am effizientesten toString() verwenden JAVA

Ich sollte die relevanten Informationen aus jeder Klasse zum Beispiel x, y einen Punkt, der für alle Formen und die Farbe sowie relevant ist. Rechteck Klasse hat seine Breite und Höhe und Kreis hat einen Radius.

Ich versuche, toString-Methode in jeder Klasse zu verwenden, indem Sie überschreiben, super verwenden und weitere Informationen hinzufügen, aber eine Sache sieht seltsam aus. Soll ich für jede Methode ein neues String-Builder-Objekt erstellen? sieht ziemlich falsch aus, obwohl es funktioniert. Ich habe versucht, es online zu suchen, aber bisher ist es entweder dies oder mit einer Reihe von String. Fehle ich etwas?

hier ist das, was ich in Form Klasse tat

public String toString() { 
     StringBuilder shapeBuilder = new StringBuilder(); 
     System.out.println(shapeBuilder.append("The x axis is: ").append(x).append(" and the y axis is: ").append(y).append(" The color of ") 
     .append(this.getClass().getSimpleName()).append(" is ").append(color)); 
     return shapeBuilder.toString(); 
    } 

Rechteck Klasse:

public String toString() { 
     super.toString(); 
     StringBuilder rectangleBuilder = new StringBuilder(); 
     System.out.println(rectangleBuilder.append("The height of the rectangle is: ").append(height) 
       .append(" And the width is: ").append(width)); 
     return rectangleBuilder.toString(); 
    } 

Kreisklasse:

public String toString() { 
     super.toString(); 
     StringBuilder circleBuilder = new StringBuilder(); 
     System.out.println(circleBuilder.append("the radius of the circle is: ").append(getRadius())); 
     return circleBuilder.toString(); 
    } 

ich sie aus dem Haupt mit Objektnamen aufrufen .toString();

+0

Sorry, was mit falsch ist, was Sie tun? –

+0

Verwenden Sie '@ Override'. Was genau ist falsch? – Li357

+0

Das Erstellen eines neuen Objekts für jede Methode scheint falsch zu sein –

Antwort

1

Die offensichtlichen Probleme

sind
  1. In Ihrer Rectangle und Circle Klasse, genannt Sie super.toString() und mit dem Ergebnis nichts tun. Es gibt keinen Grund, es anzurufen. Oder ich denke, was Sie versuchen zu tun, so etwas wie: (z Rectangle)

    public String toString() { 
        return super.toString() 
          + " height " + this.height 
          + " width " + this.width; 
    } 
    
  2. In Ihrem Fall müssen Sie nicht explizit StringBuilder verwenden. Einfach

    z.B. Shape Klasse

    public String toString() { 
        return "The x axis is: " + x 
          + " and the y axis is:" + y 
          + " The color of " + this.getClass().getSimpleName() 
          + " is " + color; 
    } 
    

    ist gut genug. Always-Use-StringBuilder ist nicht notwendig besser.

-1

Verwenden System.out.println(super.toString() zu Super-Klasse toString drucken /() verwenden.

Code unten:

public class Shape { 

    int x; 
    int y; 
    @Override 
    public String toString() { 
     return "Shape [x=" + x + ", y=" + y + "]"; 
    } 


} 


public class Rectangle extends Shape{ 

    double width,height; 

    @Override 
    public String toString() { 
     System.out.println(super.toString()); 
     return "Rectangle [width=" + width + ", height=" + height + "]"; 
    } 


    public static void main(String[] args) { 
     Rectangle rectangle=new Rectangle(); 
     rectangle.x=10; 
     rectangle.y=30; 
     rectangle.width=20; 
     rectangle.height=100; 

     System.out.println(rectangle); 

    } 

} 
Verwandte Themen