我正在开发一个应用程序,可以根据形状的面积进行比较。它正常工作,我只是想让输出更好。
我有一个形状超类和两个形状子类矩形和圆形。它们都有tostring()方法输出区域。
@Override
public String toString() {
return " has an area of : " + getArea();
}
我做了两个圆,叫做圆1和圆2。类似于矩形。将它们存储在名为shapeslist的arraylist中,我使用以下代码遍历数组并输出tostring()。
for (Shapes s:shapesList) {
System.out.println(s.toString());
}
有没有一种方法可以让我的输出打印“矩形1有一个区域圆1有一个区域等。在过去,我在我的对象中设置了名称,这样我就可以在循环中使用s.getname()。但是我想知道有没有其他方法可以在我的输出中获得对象名
我希望我已经解释清楚这一点,第一次张贴!
4条答案
按热度按时间50few1ms1#
this.getClass().getSimpleName();
结合this.hashCode();
如果你不介意哈希代码的长度的话,这可能就是你想要的getSimpleName();
返回源代码中给定的基础类的简单名称。如果基础类是匿名的,则返回空字符串。hashCode();
只要是合理可行的,由类定义的hashcode方法Object
为不同的对象返回不同的整数(这通常是通过将对象的内部地址转换为整数来实现的,但是您的
tostring()
将如下所示whhtz7ly2#
如果不需要打印每个对象的唯一名称,可以实现
Rectangle#toString
具体如下:类似地,您可以实现
Circle#toString
具体如下:但是,更好的方法是使用一个变量,
name
在你的课堂上,然后你可以做它作为这将确保每个对象都打印有其唯一的名称。
另外,请注意,您不需要打电话
toString
显式内部System.out.println
. 这个System.out.println
电话toString
含蓄地,也就是说,你只需要写System.out.println(s)
哪里s
是如下所示的对象:事实上,这就是推翻
toString
功能。ss2ws0br3#
您可以添加
public/protected abstract String getShapeName()
方法来塑造类并在中提供实现Rectangle
以及Circle
班级。然后你就可以在Shape.toString()
mrzz3bfm4#
你不能这么做。对象不包含变量名,这意味着您不能只打印变量名,而是打印:
另一方面,您可以创建一个名为
name
把它设置好,这样你就知道你在叫哪一个:然后在
Rectangle
或者Circle
上课,甚至在教室里Shapes
类,可以创建toString
方法: