toString,仍然给我一个奇怪的输出

时间:2014-06-09 23:50:35

标签: java tostring

嘿伙计我刚才有一个关于toString的问题。在之前的测试中,我的教授对toString采用了这种覆盖方法,这与我测试的方法相似:

public String toString()
{
String s="";
s+="units: " + units;
s+="\n";
s+="owner: " +owner;
return s;
}

此方法位于类Residential中,它继承自基类Construction。无论如何,这反映了我在测试中遇到的问题,我会试着说:

Residential R1 = new Residential();
R1.toString();

我以为R1.toString();会显示,我在测试中显示,但显然它被标记为错误而且它没有。

所以现在我要解决这个问题,以及如何纠正它。我试着说:

System.out.println(R1.toString());

但它仍然给我一些奇怪的输出,例如" Residential @ 5c538b31"。为什么不重写?

编辑:整个住宿类,我知道它没有被覆盖,但现在却没有被教授在他的代码中用@Override注释,所以我认为它不是&# 39; t需要。

   public class Residential extends Construction {

    private int units;
    private String owner;

    Residential ()
    {
        super();
        units = 0;
        owner = "Unknown";
    }

    Residential (String n, int y, double a, int u, String o)
    {
        super (n,y,a);
        units = u;
        owner = o;
    }

    public int getUnits()
    {
        return units;
    }

    public void setUnits(int u)
    {
        units = u;
    }

    public String getOwner()
    {
        return owner;
    }

    public void setOwner(String o)
    {
        owner = o;

    }

    public void display()
    {
        System.out.println("Name: " + getName() + " Year: " + getYear() + " Area: " + getArea() + " Number of Units: " + getUnits() + " Owner: " + getOwner());

    }

    public boolean isEqual (Residential r)
    {
        if (this.getName() == r.getName() && this.getYear() == r.getYear() && this.getArea() == r.getArea() && this.units == r.units && this.owner == r.owner)
        {
            return true;
        }
        return false;
    }

    public String toString()
    {
        String s="";
        s += "the units is: " + units;
        s += "\n";
        s += "Owner: " + owner;

        return s;

    }

编辑2:添加了构造类

 public class Construction {

private String buildername;
private int year;
private double area;


Construction()
{
    buildername = "Unknown";
    year = 0;
    area = -1;
}

Construction(String b, int y, double a)
{
    buildername = b;
    year = y;
    area = a;
}

//Mutators
public void setName(String n)
{
    buildername = n;

}

public void setYear(int y)
{
    year = y;
}

public void setArea (double a)
{
    area = a;
}

//Accessors

public String getName()
{
    return buildername;
}

public int getYear()
{
    return year;
}

public double getArea()
{
    return area;
}

public void display()
{
    System.out.println("Builder's Name: " + getName() + " Year: " + getYear() + " Area: " + getArea());     
}

public boolean isEqual(Construction c)
{
    if (this.buildername == c.buildername && this.year == c.year && this.area       == c.area)
    {
        return true;
    }
    return false;
}

}

1 个答案:

答案 0 :(得分:4)

  

但它仍然给我一些奇怪的输出,如“Residential @ 5c538b31”。我做错了什么?

这意味着您的Residential类版本未正确覆盖toString()方法。

要解决此问题,您需要为您的类提供正确的toString覆盖。我还会给方法一个@Override注释,以确保它真正覆盖了该方法。

你还说:

  

在之前的测试中,我的教授对toString有这个覆盖方法,这与我正在测试的方法类似......

...但你没有向我们展示你正在“测试”的方法。也许你想这样做。


修改
关于您发布的代码,该代码不是产生您发布的输出的代码。也许您需要刷新或重新启动IDE,但输出可能不会来自发布的代码。

另外,您的Residential toString()方法也应该在其方法体中调用其父类的toString()方法,因为返回的String应该是Residential的String的一部分。