嘿伙计我刚才有一个关于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;
}
}
答案 0 :(得分:4)
但它仍然给我一些奇怪的输出,如“Residential @ 5c538b31”。我做错了什么?
这意味着您的Residential类版本未正确覆盖toString()
方法。
要解决此问题,您需要为您的类提供正确的toString覆盖。我还会给方法一个@Override
注释,以确保它真正覆盖了该方法。
你还说:
在之前的测试中,我的教授对toString有这个覆盖方法,这与我正在测试的方法类似......
...但你没有向我们展示你正在“测试”的方法。也许你想这样做。
修改强>
关于您发布的代码,该代码不是产生您发布的输出的代码。也许您需要刷新或重新启动IDE,但输出可能不会来自发布的代码。
另外,您的Residential toString()
方法也应该在其方法体中调用其父类的toString()
方法,因为返回的String应该是Residential的String的一部分。