Java - ayuda con esto de una clase abtracta en java

 
Vista:

ayuda con esto de una clase abtracta en java

Publicado por wilson (1 intervención) el 26/02/2020 00:51:28
Ésta clase debe tener obligatoriamente un método abstracto para calcular la bonificación de cada empleado, el mismo que será un método polimórfico. Además se deben crear los métodos necesarios para que el programa funcione correctamente.

La información que se gestiona se la realiza para las siguientes personas: GERENTE, TRABAJADOR, SECRETARIA y AUXILIAR .

El cálculo de la bonificación se lo realiza de la siguiente manera:

GERENTE: 50% del sueldo.
TRABAJADOR: 35% del sueldo.
Secretaria 20% del sueldo.
Auxiliar : 10% del sueldo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda con esto de una clase abtracta en java

Publicado por Kabuto (568 intervenciones) el 26/02/2020 21:08:48
Hola.

Una clase abstracta es una clase pensada y diseñada para que sea heredada por otras clases.
Este tipo de clases están pensada para modelar los atributos y métodos que son comunes en otros tipos de clases.

Por ejemplo, en tu ejercicio, existen las clases: Gerente, Trabajador, Secretaria, Auxiliar...
Son distintos, pero todos tienen algunas cosas en común.

Por ejemplo, todos son EMPLEADOS de una empresa.
Y por ejemplo, todos van a tener un nombre y un sueldo (y un teléfono, y un email, y un documento de identidad, y una edad, y un estado civil, etc...)
En lugar de escribir siempre todos estos atributos y métodos asociados en cada una de esas clases, como van a ser comunes e iguales para todos ellos, se pueden escribir UNA SOLA VEZ en una clase abstracta, que podemos llamar Empleados
Así todas esas clases pueden heredar dichos atributos y métodos automáticamente.

Además van a compartir un método que se encarga de calcular la bonificación de los empleados, pero el método para calcularlo va a ser distinto para cada uno de ellos.
¿Significa esto que vamos a tener que escribir un método distinto para cada uno de ellos en sus correspondientes clases?
Pues sí, habrá que escribirlo para cada uno, pero lo que sí podemos hacer es "obligar" a que TODOS tengan el método para calcular bonificación declarando un método abstracto, dentro de la clase abstracta.
Este método abstracto no tendrá código, dicho código ya se implementará en cada clase que lo herede, pero al menos nos aseguramos de que todos van a tener obligatoriamente este método.

La clases abstracta Empleado podría ser algo así.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public abstract class Empleado {
 
	private String nombre;
	private double sueldo;
 
	public Empleado(String nombre, double sueldo) {
		this.nombre = nombre;
		this.sueldo = sueldo;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public double getSueldo() {
		return sueldo;
	}
 
	public void setSueldo(double sueldo) {
		this.sueldo = sueldo;
	}
 
	public abstract double calculaBonificacion();
 
}
Fíjate en el último método, es abstracto y no tiene código. No tiene ni llaves de apertura-cierre, se cierra con un punto y coma y ya está.

Ahora vamos a crear la clase Gerente, que va a heredar de la clase abstracta Empleado.
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Gerente extends Empleado{
 
	public Gerente(String nombre, double sueldo) {
		super(nombre, sueldo);
	}
 
	@Override
	public double calculaBonificacion() {
		// 50% del sueldo
		return (super.getSueldo() * 50) / 100d;
	}
 
}

Al heredar de Empleado, estamos obligados ( de lo contrario Java se quejará al compilar) a proporcionarle un constructor que reciba, como mínimo, los datos que pedía el constructor de la superclase Empleado.
Podríamos pedir más datos, por ejemplo para posible atributos que sean propios de un Gerente, pero como mínimo, hay que pedir los atributos de Empleado.

También nos obliga a sobrescribir (Override) el método abstracto calculaBonificacion().
Es ahora cuando le proporcionamos un código que se ajuste a la clase hija, en este caso, la bonificación del Gerente es el 50% de su sueldo. Así que invocamos el método getSueldo() (que lo hereda de la superclase abstracta Empleado) para obtener el sueldo y hacer el computo que nos piden

Si probamos esta clase en un ejercicio de prueba..:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Prueba {
 
	public static void main(String[] args) {
 
		Gerente gerente = new Gerente("Pepe", 900d);
 
		System.out.println("Nombre del Gerente: " + gerente.getNombre());
		System.out.println("Sueldo del Gerente: " + gerente.getSueldo());
		System.out.println("Bonificación del Gerente: " + gerente.calculaBonificacion());
 
	}
 
}

Vemos que Gerente tiene accesibles los métodos y atributos que hereda de la clase Empleado.
Resultado en pantalla:
1
2
3
Nombre del Gerente: Pepe
Sueldo del Gerente: 900.0
Bonificación del Gerente: 450.0

Así que en este simple ejemplo, ya puedes ver como declarar y usar clases y métodos abstractos.

Úsalo de ejemplo para completar tu programa, creando el resto de clases que serán hijas de Empleado e incluyendo los atributos y métodos que creas necesarios.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
6
Comentar

ayuda con esto de una clase abtracta en java

Publicado por Costero (112 intervenciones) el 02/03/2020 01:26:45
Un pequen~o cambio. Debe ser algo asi

1
2
3
4
Empleado e = new Gerente(“Pepe”, 900d);
Empleado e1 = new Trabajador(“Juan”, 300d);
 
Etc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar