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í.
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.
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..:
Vemos que Gerente tiene accesibles los métodos y atributos que hereda de la clase Empleado.
Resultado en pantalla:
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.