2017-02-02 8 views
1

Ich habe schon eine Weile versucht, das herauszufinden, ich habe verschiedene Fragen durchforstet, aber ich glaube nicht, dass ich näher dran bin.ToString aus verschiedenen Klassen drucken

Ich habe eine Oberklasse Fahrzeug, das verschiedene Details eines Fahrzeugs gibt. Ich habe dann meine Auto-Klasse, die von Fahrzeug erbt.

Ich versuche, den toString aus meiner Auto-Klasse zu drucken, die die Fahrzeugklasse überbrückt.

Grundsätzlich möchte ich die Informationen über jedes Auto ausdrucken.

Hier ist meine Haupt

public static void main(String []args) 

    { 

     Car Ford = new Car(Red, 4, true); 

     //Ford = Ford.; Tried various things here to no avail, kept getting nullfalse in output 

     Car Honda = new Car(Blue, 4, false); 


     System.out.println(Ford.vehicleDetails); 

     System.out.println("Honda"); 

    } 

} 

Das ist meine Fahrzeugklasse

public class Vehicle 

{ 

// Variables 

private String vehicleColour; 

private int numberOfWheels; 

String vehicleDetails; 

// Constructor 

public Vehicle(String vehicleColour, int numberOfWheels) 

{ 

} 

// Getters 

public String getVehicleColour() 

{ 
    return vehicleColour; 
} 

public int getNumberOfWheels() 

{ 
    return numberOfWheels; 
} 



// Setters 

public void setVehicleColour(String vehicleColour) 

{ 
    this.vehicleColour = vehicleColour; 
} 


public void setNumberOfWheels(int numberOfWheels) 

{ 
    this.numberOfWheels = numberOfWheels; 
} 


// Constructor 

public Vehicle() 

{ 

} 


// toString method super 

public String toString() { 

    String vehicleDetails = (getVehicleColour() + "" + getNumberOfWheels()); 

    return vehicleDetails; 

} 

} 

Und das ist meine Klasse Car

public class Car extends Vehicle 

{ 

    // Variables 

    private boolean convertible; 

    Car vehicleDetails; 

    // Getter 

    public boolean getConvertible() 

    { 
     return convertible; 
    } 

    // Setter 

    public void setConvertible(boolean convertible) 

    { 
     this.convertible = convertible; 
    } 

    // Constructor 

    public Car(String vehicleColour, int numberOfWheels, boolean convertible) { 


    } 


     // toString method override 

     @Override 
     public String toString() { 

     return super.toString() + convertible; 

     } 

    } 

ich meine Ausgabe will so etwas wie „Das ist Ford ist rot, hat Räder und ist ein Cabrio ", mit fettem Text aus Fahrzeug und Car Klassen jeweils.

Wie bekomme ich den fett gedruckten Text in der Ausgabe angezeigt? Im Moment bekomme ich nur Standardwerte wie null, 0 und falsch.

Ich schätze jede Eingabe, ich weiß, dass ich wahrscheinlich etwas wirklich Dummes mache, das wirklich offensichtlich ist, aber ich kann es einfach nicht sehen.

Danke.

+0

Zunächst einmal der Code gab man uns nicht einmal kompilieren. In der Klasse "Vehicle" ist "vehicleColour" als String definiert, aber 'getVehicleColour()' versucht, ein Double zurückzugeben. –

+0

Sorry, ich habe den Post bearbeitet. – Keeron

+0

@Keeron können Sie bitte, wenn meine Antwort Ihnen recht dient? –

Antwort

1

Ich möchte meine Ausgabe etwas sein, wie „Der Ford ist rot, hat vier Räder und ist ein Cabriolet“

Für Ihre obige Anforderung einfache Lösung:

System.out.println("The Ford is "+ Ford.toString()); 

Wenn Sie beabsichtige die gesamte Ausgabe von Ford.toString dann zu erhalten, während der Erstellung Ford Objekt Sie den Auto Namen zu übergeben müssen! Wie unten gezeigt und notwendige Änderungen im Konstruktor vornehmen!

Car Ford = new Car("Ford","Red", 4, true); 

jedoch Bauer in Car und Vehicle Klasse gemacht werden, aber kein Wert auf die lokalen Variablen von ihnen zugeordnet! So konnte .toString() nichts zeigen!

Erforderliche Änderungen sind:

In Hauptklasse

System.out.println("The Ford is "+ Ford.toString()); 

In Car Klasse

//change in the constructor 
public Car(String vehicleColour, int numberOfWheels, boolean convertible) { 

    setNumberOfWheels(numberOfWheels); 
    setVehicleColour(vehicleColour); 
    setConvertible(convertible); 

} 

Ich versuche, den toString aus meiner Klasse Car zu drucken, welches die Fahrzeugklasse übersteuert.

//change in toString() 


    @Override 
    public String toString() { 
     if(convertible){ 
      return super.toString() +"and is a convertible" ; 
     }else{ 
      return super.toString() +"and is not a convertible" ; 
     } 


    } 

In Fahrzeugklasse

//change the constructor 
public Vehicle(String vehicleColour, int numberOfWheels) 

{ 
     setNumberOfWheels(this.numberOfWheels); 
     setVehicleColour(this.vehicleColour); 

} 

Grundsätzlich möchte ich aus den Informationen über die einzelnen Auto drucken.

//change the toString() 
public String toString() { 

    String vehicleDetails = (getVehicleColour() + ", has " +getNumberOfWheels()+" wheels"); 

    return vehicleDetails; 

} 
+0

Danke für die wirklich ausführliche und informative Antwort, ich schätze es sehr! Ich habe nie darüber nachgedacht, Werte in der Konstruktorklasse zu setzen, ich nahm an, dass ich Werte aus den Strings nehmen könnte, aber da ich Standardwerte erhielt, wusste ich natürlich, dass etwas nicht stimmte. Danke noch einmal! – Keeron

+0

@Keeron es ist mir eine Freude, Ihnen zu helfen! Vergessen Sie nicht, eine positive Bewertung abzugeben: p –

0

ich meine Ausgabe möchte etwas wie „Der Ford ist rot, hat vier Räder und ist ein Cabrio“, mit fett gedruckten Text von Fahrzeug kommen und Auto Klassen sind.

Wenn Sie diese Wörter einfügen möchten, müssen Sie diese Wörter in Ihre toString() einfügen.

Zum Beispiel, wenn Sie möchten, dass "4 Räder" gedruckt wird, dann können Sie nicht einfach getNumberOfWheels() tun. Ansonsten bekommst du nur eine 4. Du musst etwas wie "has " + getNumberOfWheels() + " wheels" machen. Wenn Sie es nicht sagen, um alle Wörter einzuschließen, weiß es nicht, sie einzuschließen.

+0

Dank DM, ich kann diesen Teil verwalten, ich wollte den Leuten nur eine Vorstellung davon geben, was ich für das Endergebnis haben möchte. Im Moment bekomme ich etwas wie "Der Ford ist ** null **, hat ** 00 ** Räder und ist ein ** false **". – Keeron

+1

Obwohl Sie Konstruktoren erstellt haben, die Parameter übernehmen, scheinen diese Konstruktoren keinen Code zu enthalten, um die lokalen Variablen tatsächlich auf diese Parameter zu setzen. Wenn Sie 'numberOfWheels' in einen Konstruktor übergeben, sollte dieser Konstruktor wahrscheinlich' this.numberOfWheels' setzen (oder einen 'super' Konstruktor aufrufen, den Sie gemacht haben, der das tut.) –

+0

Danke DM, ich wusste nicht, dass ich das tun musste setze die Werte innerhalb des Konstruktors, was im Nachhinein ziemlich offensichtlich ist. Ich habe gesagt, dass ich wahrscheinlich etwas Dummes tat! Danke für die Hilfe. – Keeron

Verwandte Themen