2017-02-02 6 views
1

Я пытался понять это на некоторое время сейчас, я искал различные вопросы, но я не думаю, что приближаюсь.Печать toString из разных классов

У меня есть суперкласс, который дает различные детали автомобиля. Затем у меня есть класс Car, который наследуется от Vehicle.

Я пытаюсь напечатать toString из класса Car, который охватывает класс Vehicle.

В принципе, я хочу распечатать информацию о каждом автомобиле.

Вот мой главный

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"); 

    } 

} 

Это мой класс автомобиля

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; 

} 

} 

И это мой класс автомобилей

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; 

     } 

    } 

Я хочу, чтобы мой выход, чтобы быть что-то вроде « Ford красный, имеет колеса и - это конвертируемый ", с жирным шрифтом, исходящим от автомобилей и классов автомобилей соответственно.

Как получить полужирный текст для вывода на выходе? Прямо сейчас я просто получаю значения по умолчанию, такие как null, 0 и false.

Я ценю любой вход, я знаю, что я, вероятно, делаю что-то действительно глупое, что действительно очевидно, но я просто не вижу его.

Спасибо.

+0

Прежде всего, код, который вы дали нам даже не компилировать. В классе «Vehicle» значение «vehicleColour» определяется как String, но 'getVehicleColour()' пытается вернуть double. –

+0

Извините, я отредактировал это сообщение. – Keeron

+0

@ Keeron, пожалуйста, если мой ответ вам поможет? –

ответ

1

Я хочу, чтобы мой выход будет что-то вроде «Форд красного цвета, имеет 4 колеса и кабриолет»

Для вашего выше требование простое решение:

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

Если у вас намерены получить весь результат от Ford.toString, а при создании объекта Ford вам необходимо передать название машины! Как показано ниже и внести необходимые изменения в конструктор для этого!

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

Однако конструкторы в Car и Vehicle класса сделаны, но значение не присваивается локальных переменных из них! Таким образом, .toString() не получил ничего, чтобы показать!

Необходимые изменения:

В Main Class

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

в автомобиль класса

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

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

} 

Я пытаюсь напечатать ToString из моего класса автомобиля, который превосходит класс транспортного средства.

//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" ; 
     } 


    } 

В автомобиле класса

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

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

} 

В основном я хочу, чтобы распечатать информацию о каждом автомобиле.

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

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

    return vehicleDetails; 

} 
+0

Спасибо за действительно подробный и информативный ответ, я действительно ценю это! Я даже не думал о настройке значений в классе конструктора, я предположил, что могу принимать значения из строк, но, очевидно, поскольку я получал значения по умолчанию, я знал, что что-то не так. Еще раз спасибо! – Keeron

+0

@ Keeron его мое удовольствие помочь вам! Не забудьте дать преимущество: p –

0

Я хочу, чтобы мой выход, чтобы быть что-то вроде «Форд красный, имеет 4 колесо и кабриолет», с жирным текстом наступающего из автомобиля и автомобиля классов соответственно.

Если вы хотите включить эти слова, то вы должны сказать ему, чтобы они включали эти слова в ваш toString().

Например, если вы хотите напечатать «4 колеса», вы не можете просто сделать getNumberOfWheels(). В противном случае вы просто получите 4. Вы должны сделать что-то вроде "has " + getNumberOfWheels() + " wheels". Если вы не скажете, чтобы он включил все слова, он не будет знать, чтобы их включать.

+0

Спасибо DM, я могу управлять этой частью, я просто хотел дать людям представление о том, чего я хочу для конечного результата. Прямо сейчас я получаю что-то вроде «Форд ** null **, имеет ** 00 ** колеса и является ** ложным **». – Keeron

+1

Хотя вы создали конструкторы, которые принимают параметры, эти конструкторы, похоже, не имеют никакого кода в них, чтобы фактически установить локальные переменные для этих параметров. Если вы передадите 'numberOfWheels' в конструктор, этот конструктор должен, вероятно, установить' this.numberOfWheels' (или вызов конструктора 'super', который вы сделали, который делает это.) –

+0

Спасибо, DM, я не понимал, что мне нужно задайте значения внутри конструктора, что в ретроспективе довольно очевидно. Я сказал, что я, наверное, делал что-то глупое! Спасибо за помощь. – Keeron

Смежные вопросы