Hola Raga, no voy a entrar a valorar el código, que entiendo implica un gran esfuerzo y por tanto un mérito para quien lo desarrolla. Me voy a centrar en el diseño. En la solución propuesta al ejercicio se ha creado una relación de herencia entre ProductoRefrigerado y ProductoCongelado
public class ProductoRefrigerado extends ProductoCongelado
Esto no es correcto porque aunque tuvieras razones como programador, la programación no debe ir en contra de la lógica del mundo real. En este caso si un producto refrigerado heradara de un producto congelado significaría que un producto refrigerado es un tipo de producto congelado, pero esto no es así (ver enunciado).
El diseño tiene un fallo grave: no existe una clase Producto, de la cual deben heredar ProductoCongelado, ProductoRefrigerado y ProductoFresco.
Esa relación de herencia sí sería correcta: un Producto congelado es un tipo de producto, un producto refrigerado es un tipo de producto, y un producto fresco es un tipo de producto.
Eso significa un fallo en el apartado a):
a) En primer lugar realizar un esquema con papel y bolígrafo donde se represente cómo se van a organizar las clases cuando escribamos el código. Estudiar los atributos de las clases y trasladar a la superclase todo atributo que pueda ser trasladado.
Al fallar el apartado a), falla todo lo demás.
Te recomiendo replantear el código teniendo esto en cuenta. Es útil ver las propuestas de otros compañeros, por ejemplo la de
https://www.aprenderaprogramar.com/foros/index.php?topic=2342Saludos