我有一个例子来覆盖toString()方法。
import java.util.Scanner;
public class Demo{
String name = "";
String age = "";
Demo(String name, String age){
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the name:");
String name = scanner.next();
System.out.print("Enter the age:");
String age = scanner.next();
Demo test = new Demo(name, age);
System.out.println(test);
}
public String toString() {
return ("Name=>" + name + " and " + "Age=>" + age);
}
}
我的疑问是,即使没有从构造函数也不从main调用toString()方法,它如何打印测试为Name => abc和Age => 12?
答案 0 :(得分:9)
您正在呼叫System.out.println(test)
,这是对PrintStream.println(Object)
的呼叫。这将通过toString()
:
String.valueOf
打印一个对象,然后终止该行。此方法首先调用
String.valueOf(x)
来获取打印对象的字符串值,然后就像调用print(String)
然后调用println()
一样。
答案 1 :(得分:2)
您的toString()方法实际上是由println方法调用的。顺便说一下,当你重写一个方法时,我建议你在它上面使用@Override表示法,这样编译器就会检查你是否实际上覆盖了现有的方法,并且当你通过它回读它时,它也会让你和其他人保持清晰。 e.g。
@Override
public void methodToBeOverriden () {}
答案 2 :(得分:1)
<强>的System.out.println(test.toString()); 强>
答案 3 :(得分:0)
如果您将对象放在System.out.println
中,这是对toString()
Demo test = new Demo(name, age);
System.out.println(test);
打印
Object
然后终止该行。此方法首先调用String.valueOf(x)
来获取打印对象的字符串值,然后表现为调用print(String)
然后调用println()
。
答案 4 :(得分:0)
当您致电System.out.println(test)
时,它会使用您传入的对象调用toString()
方法。当您重写此方法时,它会调用您的toString()
方法,因此预期输出 - Name=>abc and Age=>12