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