【问题标题】:Print toString from different classes从不同的类打印 toString
【发布时间】:2017-02-02 19:47:57
【问题描述】:

我一直在尝试解决这个问题,我已经搜索了各种问题,但我认为我没有更接近。

我有一个超类 Vehicle,它提供了车辆的各种细节。然后我就有了继承自 Vehicle 的 Car 类。

我正在尝试打印 Car 类中的 toString,它覆盖了 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;

        }

    }

我希望我的输出类似于“福特是 红色,有 4 个轮子并且 是敞篷车”,带有粗体字分别来自 Vehicle 和 Car 类。

如何让粗体文本显示在输出中?现在我只得到默认值,例如 null、0 和 false。

感谢任何意见,我知道我可能正在做一些非常愚蠢但非常明显但我看不到的事情。

谢谢。

【问题讨论】:

  • 首先,您给我们的代码甚至无法编译。在Vehicle 类中,vehicleColour 被定义为一个字符串,但getVehicleColour() 尝试返回一个双精度值。
  • 抱歉,我已经编辑了帖子。
  • @Keeron 如果我的回答对您有帮助,您可以吗?
  • @Md.SifatulIslam,您的回答远远超出了我最初的问题。谢谢!

标签: java tostring superclass


【解决方案1】:

我希望我的输出类似于“福特是红色的,有 4 个轮子并且是敞篷车”

针对您上述要求的简单解决方案:

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

如果您打算从Ford.toString 获取整个输出,那么在创建Ford 对象时,您还需要传递汽车名称!如下所示,并在构造函数中对其进行必要的更改!

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

但是,CarVehicle 类中的构造函数已生成,但没有为它们的局部变量赋值!因此.toString() 没有得到任何显示!

需要的更改是:

在主类中

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

}

我正在尝试打印 Car 类中的 toString,它覆盖了 Vehicle 类。

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

}

【讨论】:

  • 感谢您提供非常详细且内容丰富的回复,非常感谢!我什至从没想过在构造函数类中设置值,我假设我可以从字符串中获取值,但显然,由于我得到的是默认值,我知道有些地方不对劲。再次感谢!
  • @Keeron 很高兴为您提供帮助!不要忘记投赞成票:p
【解决方案2】:

我希望我的输出类似于“福特是红色的,有 4 个轮子 并且是敞篷车”,粗体字来自 Vehicle 和 Car 分别分类。

如果你想包含这些词,那么你必须告诉它在你的 toString() 中包含这些词。

例如,如果您希望它打印“有 4 个轮子”,那么您不能只使用 getNumberOfWheels()。否则你只会得到 4。你必须做类似"has " + getNumberOfWheels() + " wheels" 的事情。如果你不告诉它包含所有单词,它就不会知道包含它们。

【讨论】:

  • 感谢 DM,我可以管理这部分,我只是想让人们了解我想要的最终结果。现在我得到类似“福特是 null,有 00 轮子并且是 false”。
  • 虽然您创建了带参数的构造函数,但这些构造函数中似乎没有任何代码来实际将局部变量设置为这些参数。如果您将numberOfWheels 传递给构造函数,则该构造函数可能应该设置this.numberOfWheels(或调用您已创建的super 构造函数。)
  • 感谢 D M,我没有意识到我需要在构造函数中设置值,事后看来,这是相当明显的。我确实说过我可能在做一些愚蠢的事情!感谢所有的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多