¿Mi comprensión de anular el método toString () es correcta?

Casi correcto, excepto en la situación en que su clase extiende otra clase. Cuando llama a toString () en una instancia de su clase, y su clase no tiene una, verificará la superclase y así volverá a Object. Si la superclase (o su superclase, etc.) tiene un método toString (), se llamará, no el que está en Object. Eso podría hacer algo diferente de lo que espera, y lo que es más, alguien puede tener un código escrito que depende de su método toString ().

Por ejemplo:

Clase Animal extiende Objeto
Class Dog extiende Animal – supongamos que esta es la clase que has escrito

Quien escribió Animal puede haber hecho que muestre su ID de base de datos como el método toString (). Y alguien que sabía esto puede tener código como:

Animal critter = getAnimal ();
String critterId = critter.toString ();

Dado que cualquier instancia de Dog también es una instancia de Animal, si getAnimal () devuelve un Dog, rompería este código si anula aString () .

Esto trae dos puntos de mejores prácticas:

  1. es una mala idea depender de toString () que produce cualquier formato particular de salida
  2. si solo desea obtener una versión en cadena de un objeto para la depuración, es más seguro escribir todas sus clases con algún otro método como toDebugString () para que no se arriesgue a interferir con alguna clase que infringe la regla # 1

Es muy común en Java que la gente anule toString () para la depuración, pero este es mi consejo basado en 16 años de desarrollo comercial de Java.

Su comprensión sobre el método toString () de la clase Object que se invoca cuando no lo ha anulado en su clase es correcta. Lo que quiero agregar es que la clase Object tiene más. Tiene un método getClass () que puede ayudar a usar Reflection (Trail: The Reflection API), método equals () que ayuda en la comparación de objetos con objetos, etc.

Además, generalmente es una buena práctica anular el método toString () ya que una referencia de memoria del objeto no va a ayudar de ninguna manera a comprender la clase a la que pertenece el objeto. También podríamos anular el método toString () para mostrar que el objeto es un formato legible por humanos. Esa es mi opinión.

Gracias por el A2A 🙂

Tu comprensión es correcta. Para proporcionar una representación legible a su clase, debe anular el método toString () de la clase Object.

La implementación predeterminada es [correo electrónico protegido] Valor que prácticamente no es útil. Por lo tanto, el documento fue un tipo de información que va a presentar en el método toString y devolverá la cadena formateada del método.