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

Java toString,仍然给我一个奇怪的输出,java,tostring,Java,Tostring,嘿,伙计们,我刚才有个关于toString的问题。在之前的一次测试中,我的教授有一种与我正在测试的方法类似的toString替代方法: public String toString() { String s=""; s+="units: " + units; s+="\n"; s+="owner: " +owner; return s; } 此方法位于继承自基类构造的类住宅内部。无论如何,这反映了我在一次测试中遇到的一个问题,我想说: Residential R1 = new Resident

嘿,伙计们,我刚才有个关于toString的问题。在之前的一次测试中,我的教授有一种与我正在测试的方法类似的toString替代方法:

public String toString()
{
String s="";
s+="units: " + units;
s+="\n";
s+="owner: " +owner;
return s;
}
此方法位于继承自基类构造的类住宅内部。无论如何,这反映了我在一次测试中遇到的一个问题,我想说:

Residential R1 = new Residential();
R1.toString();
我想R1.toString();会显示,我把它放在测试中,但很明显它被标错了,它没有

现在我来讨论这个问题,以及如何纠正它。我试着说:

System.out.println(R1.toString());
但它仍然给我一些奇怪的输出,比如“Residential@5c538b31". 为什么它不被覆盖

编辑:整个住宅类,我知道它没有被覆盖,但是教授在他的代码中也没有用@Override注释它,所以我认为它不需要

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

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

这意味着您的住宅类版本没有正确重写
toString()
方法

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

你还说:

在之前的一次测试中,我的教授有一个类似于我正在测试的这个方法的toString替代方法

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


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


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

请显示
R1
toString()
方法的实现。发布整个住宅类如果您想帮助调试代码中的奇怪行为,发布一个将非常有帮助。如果我们不能运行你的代码,我们将很难帮助你理解它。代码看起来不错(我的意思是toString方法应该可以正常工作)。你确定你在实现toString方法后编译了Residential类吗?是的,我有。我已经测试了这个简单的显示,以测试默认构造函数是否工作,它是否工作。他实际的toString看起来是这样的:public String toString(){String s=“”;s+=”长度是“+l;s+=”宽度是“+w;s+=”区域是arearect();返回s;}这是在一个Rectangle类中,所以我尝试做Rectangle R1=new Rectangle();R1.toString()是的,但是你的呢?@user2444400发布你的住宅类,这样我们就可以检查住宅R1=new Residential();System.out.println(R1.toString());是我用来尝试和输出的。好吧,没关系,我发现了问题。我是个白痴。Residential类是一个经过编辑的类,在包之外。所以toString方法实际上不在包中的Residential类中。所以我一直在调用默认的object.toString方法,而不是重写的Residential.toString m方法。