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);
}
}