Hola Luis.
Como dice el enunciado del ejercicio CU00687B tiene que haber tres tipos de productos diferenciados, frescos, refrigerados y congelados, en tu caso los separas en dos y un producto refrigerado no tiene por que ser un producto fresco.
En este enlace puedes ver una buena solución al ejercicio CU00687B:
https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0A partir de esto, en la clase EnvioDeProductos tienes un método crearEnvio, y lo idóneo es que este método tuviese un nombre que hiciese referencia a añadir productos a la lista de envío, como podría ser addProducto() o similar, y en su contenido solo contuviese la primera de las líneas que pusiste, es decir, que solo añada y no tenga ningún cometido más.
public ArrayList<Producto> addProdructo(Producto producto){
listaProductos.add(producto);
}
En cuanto al uso de Iterator, puedes probar con esto:
public void mostrarDatosEnvio(){
Iterator <Producto> it = listaProductos.iterator();
while(it.hasNext()){
Producto dato = it.next();
dato.mostrarDatosProducto();
System.out.println ("\n------------------------\n");
}
}
Saludos.