Hola arcanFAC
Me ha gustado tu versión para este ejercicio. OK
Y has añadido la clase Intermedio que controla las listas de los productos. Bien.
Aquí van mis comentarios a tu código con posibles mejoras.
Todos tus productos tienen el método imprimirInformacion() excepto la clase Producto. Si esta clase también lo tubiera, sería mas o menos:
public void imprimirInformacion(){
System.out.println("\nNombre del producto: " + getNombreProducto() + "\nFecha de caducidad: " + getFechaDeCaducidad()+ "\nNumero de lote: ");
Y luego en los productos que heredan de esta clase, el método imprimirInformacion() quedaría más o menos así para la clase ProductoCongelado:
public void imprimirInformacion(){
super.imprimirInformacion();
System.out.println( "\nTemperatura de congelación recomendada: " + getTempCongelacionR());
}
Como ves, invocamos el método imprimirInformacion() de la clase padre y luego presentamos los atributos propios de la clase actual.
Luego en la clase Intermedio en el método imprimirProductos(), con un condicional, si tu lista de productos está vacía, en lugar de mostrar el mensaje:
Los productos frescos que han sido guardados son:
seguido de una lista en blanco.
Mostrar otro como:
No hay productos fescos guardados.
Como ves no son grandes mejoras, pero ayudan en el primer caso a no repetir código (si hubiera que modificarlo bastaría con hacerlo en la clase Producto, no en cada una de las clases herederas) y en el segundo a no mostrar mensajes inexactos.
Saludos