Java toString,仍然给我一个奇怪的输出
嘿,伙计们,我刚才有个关于toString的问题。在之前的一次测试中,我的教授有一种与我正在测试的方法类似的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
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方法。