Java 重写System.out.println

Java 重写System.out.println,java,Java,如何重写系统.out.println() 就像我会覆盖toString() 我想让你打电话的时候 System.out.println(OBJECT); 它将打印对象的属性而不是引用。严格地说,您的问题“如何覆盖System.out.println()?”的答案是,您可以使用替代的PrintStream替换System.out。您提供的PrintStream可以按照您的喜好(*)实现println 但这几乎肯定不是你的意思。您可以替代类上的toString()方法,然后这将用于所有希望构建实例

如何重写系统.out.println()

就像我会覆盖
toString()

我想让你打电话的时候

System.out.println(OBJECT);

它将打印对象的属性而不是引用。

严格地说,您的问题“如何覆盖System.out.println()?”的答案是,您可以使用替代的
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
,则它将打印您想要的任何内容。对象的哪个属性?不同的对象将具有不同的“属性”。您的意思是要打印每个对象的toString()方法吗?另外,重写
toString
方法和
System.out.println()
不会得到相同的结果。这是两种不同的方法。
System.out.println(OBJECT);