Bueno la clase Persona es la siguiente:
public class Persona
{
// instance variables - replace the example below with your own
private String nombres;
private String apellidos;
private String rut;
private Pais pais;
/**
* Constructor sin parametros para la Clase Persona
*/
public Persona(){
setNombres("Sin Nombres");
setApellidos("Sin apellidos");
setRut("1-9");
setPais(new Pais());
}
/**
* Constructor con parametros para la Clase Persona
* @param String nombres
* @param String apellidos
*/
public Persona(String nombres, String apellidos,String rut, Pais pais){
setNombres(nombres);
setApellidos(apellidos);
setRut(rut);
setPais(pais);
}
/**
* Accesador para el atributo nombres
* @return String nombres
*/
public String getNombres(){
return nombres;
}
/**
* Accesador para el atributo apellidos
* @return String apellidos
*/
public String getApellidos(){
return apellidos;
}
/**
* Accesador para el atributo pais
* @return String pais
*/
public Pais getPais(){
return pais;
}
/**
* Mutador para el atributo nombres
* @param String nombres
*/
public void setNombres(String nombres){
StringTokenizer tokens = new StringTokenizer(nombres.trim());
if(tokens.countTokens()>=2){
this.nombres=nombres.trim();
}
else {
this.nombres = "Sin Nombre";
}
}
/**
* Mutador para el atributo apellidos
* @param String apellidos
*/
public void setApellidos(String apellidos){
if(apellidos.trim().length()>=3){
this.apellidos = apellidos;
}
else{
this.apellidos = "Sin Apellidos";
}
}
/**
* Accesador para atributo rut
* @return String
*/
public String getRut(){
return rut;
}
/**
* Accesador para atributo rut
* @return String
*/
public void setRut(String rut){
if(rut.trim().length()>=3){
this.rut=rut.trim();
}
else{
this.rut="NNN";
}
}
/**
* Mutador para el atributo pais
* @param Pais pais
*/
public void setPais(Pais newPais){
this.pais = newPais;
}
/**
* Metodo de impresión de la clase Persona
*/
public void printPersona()
{
System.out.println(toString());
}
/**
* Metodo toString() que sobreescribe la Clase Persona
* @return String
*/
@Override
public String toString()
{
return "Nombres: " + getNombres()
+"Apellidos: "+ getApellidos()
+ "Rut : " + getRut()
+"Pais: "+ pais.toString();
}
}
La clase Jugador es la siguiente:
public class Jugador extends Persona
{
// instance variables - replace the example below with your own
private String posicion;
private int numeroCamiseta;
/**
* Constructor sin parametros para la Clase Jugador
*/
public Jugador(){
super();
this.posicion = "arquero"; // setPosicion("suplente"); //
this.numeroCamiseta = 1; //setNumCam(13);
}
/**
* Constructor con parametros para la Clase Jugador
* @param String nombres
* @param String apellidos
* @param Pais pais
* @param String posicion
*/
public Jugador(String nombres, String apellidos,String rut,Pais pais, String posicion){
super(nombres,apellidos,rut, pais);
setPosicion(posicion); // this.posicion= posicion;
setNumeroCamiseta(numeroCamiseta);
}
/**
* Accesador para el atributo posicion
* @return String posicion
*/
public String getPosicion(){
return posicion;
}
/**
* Accesador para el atributo numeroCamiseta
* @return int numeroCamiseta
*/
public int getNumeroCamiseta(){
return numeroCamiseta;
}
/**
* Mutador para el atributo posicion
* @param String posicion
*/
public void setPosicion(String posicion){
if(posicion.trim().equalsIgnoreCase("arquero") || posicion.trim().equalsIgnoreCase("defensa") ||
posicion.trim().equalsIgnoreCase("volante") || posicion.trim().equalsIgnoreCase("delantero")){
this.posicion = posicion.trim().toLowerCase();
}
else{
this.posicion = "suplente";
}
if(getPosicion().equalsIgnoreCase("arquero")){
this.numeroCamiseta = 1;
}
else if(getPosicion().equalsIgnoreCase("defensa")){
this.numeroCamiseta = 3;
}
else if(getPosicion().equalsIgnoreCase("volante")){
this.numeroCamiseta = 10;
}
else if(getPosicion().equalsIgnoreCase("delantero")){
this.numeroCamiseta = 9;
}
else{
this.numeroCamiseta = 13;
}
}
/**
* Mutador para el atributo numeroCamiseta
* @param int numeroCamiseta
*/
private void setNumeroCamiseta(int numeroCamiseta){
if(getPosicion().equalsIgnoreCase("arquero")){
this.numeroCamiseta = 1;
}
else if(getPosicion().equalsIgnoreCase("defensa")){
this.numeroCamiseta = 3;
}
else if(getPosicion().equalsIgnoreCase("volante")){
this.numeroCamiseta = 10;
}
else if(getPosicion().equalsIgnoreCase("delantero")){
this.numeroCamiseta = 9;
}
else{
this.numeroCamiseta = 13;
}
}
/**
* Metodo de impresión de la clase Jugador
*/
public void printJugador()
{
System.out.println(toString());
}
/**
* Metodo toString() que sobreescribe la Clase Jugador
* @return String
*/
@Override
public String toString()
{
return super.toString()
+ "Posicion: " + getPosicion()
+ "Numero de Camiseta " + getNumeroCamiseta();
}
}
y La clase entrenador es la siguiente
public class Entrenador extends Persona
{
// instance variables - replace the example below with your own
private int anioExperiencia;
/**
* Constructor sin parametros para la Clase Entrenador
*/
public Entrenador(){
super();
setAnioExperiencia(1);
}
/**
* Constructor con parametros para la Clase Entrenador
* @param String nombres
* @param String apellidos
* @param Pais pais
* @param int anioExperiencia
*/
public Entrenador(String nombres, String apellidos,String rut, Pais pais, int anioExperiencia){
super(nombres,apellidos,rut,pais);
setAnioExperiencia(anioExperiencia);
}
/**
* Accesador para el atributo anioExperiencia
* @return int anioExperiencia
*/
public int getAnioExperiencia(){
return anioExperiencia;
}
/**
* Mutador para el atributo anioExperiencia
* @param int anioExperiencia
*/
public void setAnioExperiencia(int anioExperiencia){
if(anioExperiencia>0){
this.anioExperiencia = anioExperiencia;
}
else {
this.anioExperiencia = 1;
}
}
/**
* Metodo de impresión de la clase Entrenador
*/
public void printEntrenador()
{
System.out.println(toString());
}
/**
* Metodo toString() que sobreescribe la Clase Entrenador
* @return String
*/
@Override
public String toString()
{
return super.toString()
+ "Años de experiencia; " + getAnioExperiencia();
}
}
Ambas tienen opcion de imprimir su informacion, y es al metodo que intento llegar... creo que el problema va por no poder hacer "refundicion" a cualquier cosa. No es algun ejercicio o que haga referencia el curso, es algo propio.
Bueno el tema es que al final lo solucione de esta forma, y no sé si sera la correcta, y tampoco sé porque compilo de esta forma
public void consultar(Persona persona){
if(listaPersona.contains(persona)){
if(persona instanceof Jugador){
Jugador jug = (Jugador)persona;
jug.printJugador();
}
if(persona instanceof Entrenador){
Entrenador ent = (Entrenador)persona;
ent.printEntrenador();
}
else{
persona.printPersona();
}
}
else{
System.out.println("Persona no existe");
}
}
Porque no compilaba cuando directamente tomaba el objeto persona de la Clase Persona que recibia por parametro, e invoca el metodo printJugador??
El cual fue el puse en el primer comentario:
public void consultar(Persona persona){
if(listaPersona.contains(persona)){
if(persona instanceof Jugador){
//persona.printJugador();
}
if(persona instanceof Entrenador){
//persona.printEntrenador();
}
else{
persona.printPersona();
}
}
else{
System.out.println("Persona no existe");
}
}
Podía invocar el printPersona(), pero no los métodos para las otras clases... entonces ahí quede pillado. Si alguien con mas experiencia me explica con peritas y manzanas quedo mega feliz y agradecido. Desde ya comenzare a participar en el foro respondiendo a los que están iniciándose.
De antemano gracias