Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Polimorfismo duda..

Hola gente.. estoy aprendiendo java y bajo unos practicos de unos cursos q se dictan en una universidad.. el tema es que me trabe en este ejercicio de polimorfismo!! no entiendo bien este tema y quiero aprenderlo antes de pasar a interfaces!

Programe el codigo faltante para realizar un programa que muestre por pantalla lo
siguiente dependiendo del caso:
El perro fue alimentado
El gato fue alimentado
Fragmento 1:
Gato Simon = new Gato ();
Animal criatura = Simon; / / upcasting
criatura.comer (); / / = Gato.comer
Perro Rover = new Perro ();
alimentar(Rover);
alimentar(Simon);
Fragmento 2:
void alimentar(Animal a)
(
a.comer ();
)

creo una clase animal abstract, y dos clases perro y gato q extienden de animal! pero me complican la diferente forma de casting q usa.. mas la ubicacion de void alimentar(animal a) si me pueden dar una ayuda!! les voy a agradecer

saludos!

julio 11, 2012 | Unregistered Commenterrisked

¿Puedes poner aquí el código completo de esas clases?. Sin ver cómo las has implementado, va a ser difícil echarte una mano.

julio 12, 2012 | Registered Commenterchoces

Hola.. ese es el ejercicio... me dan esa porcion de codigo y tengo q hacer el resto del ejercicio... creo q tengo q usar el instanceof... el problema es q no lo se usar!!

pienso en hacer una clase abstract animal y dos clase extends perro y gato.. pero me pierdo en la salida!! y en el llamado del metodo alimentar!

julio 12, 2012 | Unregistered Commenterrisked

Puedes empezar usando y modificando estas clases:

public interface Animal {

void comer();
}

public class Gato implements Animal {

@Override
public void comer() {
// código para comer
}
}

public class Perro implements Animal {

@Override
public void comer() {
// código para comer
}
}

julio 12, 2012 | Registered Commenterchoces

Otra solución, usando clases abstractas en esta ocasión:

public abstract class Animal {

public abstract void comer();
}

public class Gato extends Animal {

@Override
public void comer() {
// código para comer
}
}

public class Perro extends Animal {

@Override
public void comer() {
// código para comer
}
}

julio 12, 2012 | Registered Commenterchoces

claro.. eso es lo q hice!! el tema es que me pierdo en el llamado al metodo alimentar!

alimentar(Rover);
alimentar(Simon);
Fragmento 2:
void alimentar(Animal a)
(
a.comer ();
)

yo siempre lo hacia con las clase abstract pero dice q tiene q existir esos metodos alimentar!
y ahi me complico la vida!!

julio 12, 2012 | Unregistered Commenterrisked

El método alimentar no tiene que pertenecer a esas clases.
Se puede declarar en otra clase cualquiera.

julio 12, 2012 | Registered Commenterchoces

ah listo!! muchas gracias!!

julio 12, 2012 | Unregistered Commenterrisked

Guenas.

Esto también es todo un arte :)
Como diría Jesulin de Ubrique " El concepto es el concepto y yo lo veo como un toro".

Un animal cuando se le alimenta normalmente solo come. En el caso del cuidador alimentar a un animal puede implicar ademas otras acciones como ir al almacén a buscar pienso adecuado, llevarlo a la maquina que reparte, etc.Esto no tiene porque ser siempre lo mismo ni tan siquiera para cada animal distinto, así que como dice el otro contertulio el método alimentar no tiene porque pertenecer al animal. Solo la parte concreta especifica de ese animal en concreto.

Una forma cómoda de preparar estos temas es comenzar de arriba a abajo para ver que acciones intervienen y luego crear los casos concretos (gallina, abeja, buey) , ver que tienen en común y desde ellos ir de abajo hacia arriba para crear las superclases que agrupen comportamientos comunes.

A mi siempre me ha funcionado bastante bien esta forma de conceptualizar, aunque cada maestrillo tiene su librillo :)

julio 15, 2012 | Unregistered CommenterPaposo