【发布时间】:2020-10-27 14:59:54
【问题描述】:
正如我一直在学习的那样,甚至一些 IDE 都将其嵌入其中,以覆盖 toString() 方法以打印出该类的所有实例变量。
object.java中定义的原始toString()定义如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
通常将其覆盖为:
public String toString() {
return "className{" +"var1="+var1+", var2="+var2+'}';
}
我们为什么不保留toString() 方法的原始功能并创建一个具有此功能的新方法(使用不同的名称)?
【问题讨论】:
-
这对于基本的调试和日志记录很有用。在试图找出应用程序的状态时,您更愿意在控制台或日志语句中看到哪个打印? toString 被覆盖的原因使用新方法是因为当对象被评估为字符串时会调用 toString。例如
System.out.println(object)将调用 toString 方法。 -
"重写java中的toString()方法来打印类的实例变量?吹毛求疵,但
toString不应该 打印 任何东西。它应该返回 表示对象状态的字符串(它的数据,以及它所代表的内容)。如何以及何时打印取决于班级的用户。 -
oop 的优点之一是多态性。为什么要扔掉?通过覆盖 toString(),它会在任何调用 toString() 的地方都以这种方式出现。