Como muestro el atributo de un objeto almacenado en un Vector
Hola, soy nuevo por aqui asi que saludos a todos, quisiera que me ayuden en como resolver esto, tengo una clase Persona y un vector, en el Vector guardo un objeto de esa clase, luego quiero mostrar los atributos de ese objeto por System.out..... y nose como...les dejo lo que tengo armado...
package miaplicacion;
import java.util.*;
class Persona{
String nombre;
String apellido;
String edad;
}
public class Main {
public static void main(String[] args) {
Vector vect1 = new Vector();
Persona abuela= new Persona();
abuela.nombre="Nona";
vect1.add(abuela);
System.out.println((Persona)vect1.elementAt(0));
}
}
GRACIAS.
DAVID
package miaplicacion;
import java.util.*;
class Persona{
String nombre;
String apellido;
String edad;
}
public class Main {
public static void main(String[] args) {
Vector vect1 = new Vector();
Persona abuela= new Persona();
abuela.nombre="Nona";
vect1.add(abuela);
System.out.println((Persona)vect1.elementAt(0));
}
}
GRACIAS.
DAVID
Pues tienes varias opciones, la primera y mas obvia es llamar uno a uno los atributos de la clase, aunque para esto deben ser publicos... harias algo como esto:
System.out.println( ((Persona)vect1.elementAt(0)).nombre + ((Persona)vect1.elementAt(0)).apellido + ((Persona)vect1.elementAt(0)).edad );
Por ejemplo, solo fijate en los parentesis para no tener problemas.
Otra forma seria que tu clase Persona tuviera metodos de consulta (observadores) como:
public String getNombre(){ return nombre; }
public String getApellido(){ return apellido; }
public int getEdad() { return edad; }
y tendrias un codigo muy similar solo que en lugar de poner ((Persona)vect1.elementAt(0)).nombre, pones ((Persona)vect1.elementAt(0)).getNombre()
Esto funciona mejor debido a que no rompes con las reglas del encapsulado, pero aun no es optimo
Otra cosa que puedes hacer es sobreescribir el método toString que cualquier Object tiene, lo unico que haces es declararlo dentro de tu clase Persona como sigue:
class Persona{
...
public String toString(){
return nombre+" "+apellido+" "+edad;
}
...
}
Este metodo se invoca automáticamente cada que necesitas un String, por lo que en tu main tendrias que poner solo algo así:
System.out.println( (Persona)vect1.elementAt(0) );
Ya con eso mandas a escribir el nombre, los apellidos y la edad sin cansarte tanto y manteniendo el encapsulamiento de la clase.
Espero que estos tips te sean utiles
System.out.println( ((Persona)vect1.elementAt(0)).nombre + ((Persona)vect1.elementAt(0)).apellido + ((Persona)vect1.elementAt(0)).edad );
Por ejemplo, solo fijate en los parentesis para no tener problemas.
Otra forma seria que tu clase Persona tuviera metodos de consulta (observadores) como:
public String getNombre(){ return nombre; }
public String getApellido(){ return apellido; }
public int getEdad() { return edad; }
y tendrias un codigo muy similar solo que en lugar de poner ((Persona)vect1.elementAt(0)).nombre, pones ((Persona)vect1.elementAt(0)).getNombre()
Esto funciona mejor debido a que no rompes con las reglas del encapsulado, pero aun no es optimo
Otra cosa que puedes hacer es sobreescribir el método toString que cualquier Object tiene, lo unico que haces es declararlo dentro de tu clase Persona como sigue:
class Persona{
...
public String toString(){
return nombre+" "+apellido+" "+edad;
}
...
}
Este metodo se invoca automáticamente cada que necesitas un String, por lo que en tu main tendrias que poner solo algo así:
System.out.println( (Persona)vect1.elementAt(0) );
Ya con eso mandas a escribir el nombre, los apellidos y la edad sin cansarte tanto y manteniendo el encapsulamiento de la clase.
Espero que estos tips te sean utiles