Vamos a crear un clase sencilla llamada Persona.

Y además, creamos otra clase llamada GestorPersonas que permita mantener una lista de Personas

Creamos también un método que nos añada Personas de ejemplo, para no tener que hacerlo a mano:

Y añadimos este método al constructor:
1
2
3
4
5
public GestorPersonas()
{
personas = new ArrayList<>();
addSamplePersons();
}

Si creamos un nuevo objeto de la clase GestorPersonas, automáticamente añade dos objetos de la clase Persona.

La clase GestorPersonas tiene un método llamado printAll() para imprimir la lista de las Personas.
1
2
3
4
5
public void printAll(){
for(Persona persona : personas){
System.out.println(persona);
}
}
Por ejemplo,
1
gestorPe1.printAll();
Imprime:
1
2
Persona@47879850
Persona@43b80478
Cuando usamos un objeto como valor en un String, java llama automáticamente al método toString() de la clase Object de la que heredan todas las clases de Java.
Y este método, imprime el nombre de la clase, seguido de @ y de un hash (un identificador único de objeto).
Vamos a crear ahora un método en Persona, llamado getDetails()
1
2
3
public String getDetails(){
return ("Nombre: " + nombre + ", Apellidos: " + apellidos);
}
Ahora vamos a modificar el printAll() para que imprima el objeto,
1
2
3
4
5
public void printAll(){
for(Persona persona : personas){
System.out.println(persona.getDetails());
}
}
Ahora cuando llamamos a printAll(), imprime lo siguiente:
1
2
Nombre: Pepe, Apellidos: M
Nombre: Juan, Apellidos: J
Pero un manera más estándar es rescribir el método toString().
1
2
3
public String toString(){
return ("Nombre: " + nombre + ", Apellidos: " + apellidos);
}
Y ahora ya podemos volver a usar:
1
2
3
4
5
6
public void printAll(){
for(Persona persona : personas){
//Ya no hace falta llamar al método getDetails()
System.out.println(persona);
}
}