Как работает переопределение toString () - PullRequest
1 голос
/ 24 января 2020

Я только что узнал о методе toString() в классе объектов и о том, как переопределить его в другом классе.

class Box {
      public String toString(){
          return "class Box";
      }
}

class B {
    public static void main(String args[]){
        Box b1=new Box();
        System.out.println(b1); //case 1
        Box b2=b1; //case 2
    }
}

Поэтому мой вопрос заключается в том, как объект box узнает, что он возвращает строку в toString() в классе Box в случае 1 и вернуть адрес объекта b1 в случае 2?

Ответы [ 2 ]

4 голосов
/ 24 января 2020

Метод System.out.println, который вы вызываете, является перегрузкой (Object), а не (String). PrintStream.println(Object) вызывает toString() для своего аргумента (педантичность: прямо или косвенно, если аргумент не null).

2 голосов
/ 24 января 2020

Волхвов нет c. Если вы углубитесь в метод, в конечном итоге toString вызывается явно.

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString(); //in your case obj = the box in b1
}
...