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.