2014-12-18 3 views
1

У меня есть пример, чтобы переопределить метод toString().Когда метод 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); 
    } 
} 

Мои сомнения в том, как это печать тест как Name => ABC и возраст => 12, даже если ToString() метод не вызывается ни из конструктора, ни от основной?

+1

добавить примечание '@ Override' - я не знаю, поможет ли это, но хорошо иметь его;) – rzysia

ответ

9

Вы звоните System.out.println(test), что является вызовом PrintStream.println(Object). Это будет вызывать toString() по ссылке, вы проходите в, через String.valueOf:

Печать объекта, а затем завершить линию. Этот метод сначала вызывает String.valueOf(x), чтобы получить строковое значение печатного объекта, а затем ведет себя так, как будто он вызывает print(String), а затем println().

+4

И для меня большая честь иметь ответ Джона Скита на мой пост. – Leo

0

Если поместить объект в System.out.println, который является вызовом toString()

Demo test = new Demo(name, age); 
System.out.println(test); 

От println(java.lang.Object)

печатает Object, а затем завершить линию. Этот метод сначала вызывает String.valueOf(x), чтобы получить строковое значение печатного объекта, а затем ведет себя так, как будто он вызывает print(String), а затем println().

2

Ваш метод toString() фактически вызывается методом println. Кстати, когда вы переопределяете метод, я предлагаю вам использовать надпись @Override над ним, таким образом компилятор проверяет, что вы фактически переопределяете существующий метод, и он также сохраняет его понятным для себя и других, когда вы читаете его обратно. например

@Override 
public void methodToBeOverriden() {} 
0

При вызове System.out.println(test) вызывается метод toString(), используя объект, переданный в качестве вы переопределить этот метод, он звонит toString() методы, следовательно, ожидаемый результат -. Name=>abc and Age=>12

1

Вы назвали System.out.println (тест); и его влияние, как вы звоните

System.out.println (test.toString());

Смежные вопросы