如何重写 System.out.println()
?
就像我会重写 toString()
一样;
@Override
public String toString() {
return "x";
}
我想让这样做:当您调用
System.out.println(OBJECT);
它将打印对象的属性而不是引用。
如何重写 System.out.println()
?
就像我会重写 toString()
一样;
@Override
public String toString() {
return "x";
}
我想让这样做:当您调用
System.out.println(OBJECT);
严格来说,回答你的问题 "如何覆盖System.out.println()?" 的答案是您可以使用System.setOut
用其他PrintStream
替换System.out
。您提供的PrintStream
可以按照您喜欢的方式实现println
(*)。
但这几乎肯定不是你的意思。您可以代替在类上覆盖toString()
方法,然后将其用于所有希望构建实例字符串表示的位置,而不仅仅是System.out.println
。
(*) 但是,如果您想符合规范,您的灵活性不是很大,例如println(Object)
"调用String.valueOf(x)
"。
覆盖System.out.println
不是你需要的。要做到这一点,你需要扩展PrintStream并覆盖printLn方法的所有重载版本,然后需要通过调用System.setOut()
来替换JVM的标准流。
每个Java对象都具有将自身转换为字符串表示形式的能力。为了“定制”此表示形式,您需要覆盖toString()
方法。
无论对象的类别如何,printLn始终会独立地调用toString()
。这就是我们所说的多态。
因此,为想要特殊字符串表示形式的每个类覆盖toString()
方法。
toString
方法,那么它将打印出你想要的任何内容。 - kaya3toString
方法和System.out.println()
并不会得到相同的结果。它们是两种不同的方法。 - Nicolas