Foros del Web » Programación para mayores de 30 ;) » Java »

ayuda con polimorfismo en java

Estas en el tema de ayuda con polimorfismo en java en el foro de Java en Foros del Web. buenas tardes, lo que pasa es que tengo un programa en java sobre el polimorifsmo, pero no logro entenderlo el compilada y todo, lo que ...
  #1 (permalink)  
Antiguo 13/07/2010, 12:31
 
Fecha de Ingreso: junio-2010
Mensajes: 24
Antigüedad: 13 años, 10 meses
Puntos: 0
ayuda con polimorfismo en java

buenas tardes, lo que pasa es que tengo un programa en java sobre el polimorifsmo, pero no logro entenderlo el compilada y todo, lo que pasa es que tengo que explicarlo tanto en php como en java, en php si lo entiendo, pero en java nop, no entiendo dond se ejecuta el polimorfismo en java en este programa?bueno es qtampoco tengo mucha experiencia con java, sera qm pueden ayudar a explicarmelo? les paso el codigo qtengo en java....

package TALLER;
//clase que hereda de la clase padre (empleado)

public class Asalariado_1 extends Empleado_1 {
public float salario; //Salario anual
public float preparoPago() {
System.out.println("Calculando el pago del salario para " + nombre);
return (salario/52);
}
}
--------------------------------------------------------------------
package TALLER;
// Esta es la clase de la cual van a heredar las demas

public class Empleado_1 {
public String nombre;
public String direccion;
public int cedula;

public void envioCheque() {
System.out.println("Enviar cheque a " + nombre + " " + direccion);
}
}
---------------------------------------------------------
package TALLER;
//clase que hereda de la clase padre (empleado)

public class PorComision extends Empleado_1{
public float porcentaje; // porcentaje de comision sobre ventas totales
public float ventasTotales; //total de ventas realizadas

public float preparoPago() {
System.out.println("Calculando el pago por comision para " + nombre);
float pago = ventasTotales * porcentaje;
return pago;
}
}
----------------------------------------------------------
package TALLER;
// clase que hereda de la clase padre (empleado)

public class Porhoras_1 extends Empleado_1 {
public float tarifaHora; //tarifa de pago
public float horasTrabajadas; //horas trabajadas semanalmente
public float preparoPago() {
System.out.println("Calculando el pago por horas para " + nombre);
float pago = 0.0F;
if(horasTrabajadas <= 40)
{
pago = tarifaHora * horasTrabajadas;
}
else //Necesita calcular el sobretiempo
{
pago = (tarifaHora * 40) + (tarifaHora * (horasTrabajadas - 40) * 1.5F);
}
return pago;
}
}
----------------------------------------------------------------------
package TALLER;
// demostracion de la herencia en la POO
public class Demo {
public static void main(String [] args) {

System.out.println("Instanciando un empleado tipo Asalariado");
Asalariado_1 s = new Asalariado_1();
s.nombre = "Pedro Perez";
s.direccion = "Caracas";
s.cedula = 7654321;
s.salario = 100000.00F;

System.out.println("Instanciando un empleado tipo porHoras");
Porhoras_1 h = new Porhoras_1();
h.nombre = "Luis Ordaz";
h.direccion = "Guatire";
h.cedula = 1111111;
h.tarifaHora = 10.00F;
h.horasTrabajadas = 50;

System.out.println("Instanciando un empleado tipo porComision");
PorComision c = new PorComision();
c.nombre = "Juan Herrera";
c.direccion = "Guarenas";
c.cedula = 6555172;
c.ventasTotales = 250000f;
c.porcentaje = 0.15f;

System.out.println("Pagando a empleados");
System.out.println(s.nombre + " " + s.preparoPago());
System.out.println(h.nombre + " " + h.preparoPago());
System.out.println(c.nombre + " " + c.preparoPago());

System.out.println("Enviando cheques");
s.envioCheque();
h.envioCheque();
c.envioCheque();
}
}
  #2 (permalink)  
Antiguo 13/07/2010, 13:54
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: ayuda con polimorfismo en java

Tal y como lo tienes no está aplicando polimorfismo en ningún sitio.

Imagínate que quieres una lista que contenga los distintos tipos de empleados, y que cuando saques cualquier elemento de la lista le puedas aplicar un método (en tu caso supongo que preparoPago() )

Por ser de distintas clases (aunque relacionadas) necesitas guardarlos como si fueran Object, el problema es que a la hora de sacarlos, necesitarás hacerle un cast para convertirlos en el tipo de objeto que quieres usar y así poder llamar a sus métodos. Esto es un coñazo ya que tendrías que detectar de que tipo es cada elemento para poder hacerle el cast adecuado.

La otra solución, es utilizar polimorfismo. Guardas todos los elementos como si fuesen Empleado_1, de forma que al sacarlos puedes hacer un cast para referenciarlos como objetos de la clase padre y llamar a su método (tiene que existri en la clase padre). Si usas las etiquetas <Empleado_1> al declarar la lista, ni siquiera necesitas el cast.

Código:
Porhoras_1 horas1 = new Porhoras_1()
Asalariado_1  asal1 = new  Asalariado_1()

Rellenas con los datos que quieras, y procedes al polimorfismo/cast

Empleado_1 e1 = horas1
Empleado_1 e2 = asal1

e1.preparoPago();
e2.preparoPago();
Java detecta automáticamente qué tipo de clase es, y llama al preparoPago() que le corresponde, pero ojo, desde las referencias de Empleado_1 sólo podrás llamar a métodos que existan en Empleado_1, aunque el objeto se de una clase derivada y posea más métodos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.