Hola,  Envío el ejercicio de herencia CU00687B del tutorial de programación orientada a objetos resuelto.  Cree una nueva clase testHerencia3B, debido a que en la primera que había generado, primero cargaba todos los datos y al final mostraba todos los productos juntos, y aparecían bien todos los datos menos la fecha que siempre me mostraba la misma.  En esta nueva clase la testHerencia3B cargo los datos y los voy mostrando al mismo tiempo, así la visualización es correcta, pero a mí me gustaba más la otra forma de primero ingresar los datos y luego mostrarlos.  
Otra duda que tuve, y realicé diferentes pruebas y luego dejé todas las cargas de la misma manera es que no sabía que es mejor si generar el objeto vacío y luego agregar los datos con SET o cargarlos directamente como lo hice.
Desde ya agradezco a todos por vuestra colaboración.
Saludos
Clase Producto
/**
 * class Producto
 * 19/10/2016
 * Ej. CU00687B
 */
import java.util.Calendar;
public class Producto
{
    private Calendar fechaCaducidad;
    private int numeroLote;
    private Calendar fechaEnvasado;
    private String paisOrigen;
    public Producto(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisOrigen )
    {
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvasado = fechaEnvasado;
        this.paisOrigen = paisOrigen;
    }
    public Producto() {
        paisOrigen ="";
        numeroLote =0; 
        Calendar fechaCaducidad = Calendar.getInstance();
        Calendar fechaEnvasado = Calendar.getInstance();
    }
   public Calendar getProductoFechaCaducidad() {return fechaCaducidad;}
   public int getProductoNumeroLote() {return numeroLote;}
   public Calendar getProductoFechaEnvasado() {return fechaEnvasado;}
   public String getProductoPaisOrigen() {return paisOrigen;}
   
   public void setProductoFechaCaducidad(Calendar fechaCaducidad) {
        this.fechaCaducidad = fechaCaducidad;  }
   public void setProductoNumeroLote( int numeroLote) { this.numeroLote = numeroLote;}
   public void setProductoFechaEnvasado(Calendar fechaEnvasado) { this.fechaEnvasado = fechaEnvasado;}
   public void setProductoPaisOrigen(String paisOrigen) { this.paisOrigen = paisOrigen;}
   
   public void mostrarDatosProducto(){
      System.out.println("Producto Nº Lote: " + getProductoNumeroLote() + " Fecha de Caducidad: " + fechaCaducidad.getTime().toString() +
      " País de Origen: " + getProductoPaisOrigen() + " Fecha de Envasado: " + fechaEnvasado.getTime().toString());}
}
Clase de Productos Frescos
/**
 * Write a description of class ProductoFresco here.
 * Ej. CU00687B
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoFresco extends Producto
{
    
    public ProductoFresco(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisDeOrigen)
    {
        super (fechaCaducidad, numeroLote, fechaEnvasado, paisDeOrigen);
    }
    public ProductoFresco() {super(); }
     
    public void muestraInfoProdFresco() {
        mostrarDatosProducto(); }
}
Clase de Productos Congelados
/**
 * Write a description of class ProductoCongelado here. 
 * Modificado para el ejercicio CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongelado extends Producto
{
    private double temperaturaMant;
    public ProductoCongelado(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant)
    {
        super (fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen);
        this.temperaturaMant = temperaturaMant;
    }
    public ProductoCongelado() {
        super();
        temperaturaMant = 0;}
        
    public double getTemperaturaMant() {return temperaturaMant;}
        
    public void setTemperaturaCont (double temperaturaMant) {
        this.temperaturaMant = temperaturaMant; }
            
    public void muestraInfoProdCongelado() {
        System.out.println("Su temperatura es: "+getTemperaturaMant()+" º");
    }
}
Clase Productos Refrigerados
/**
 * Write a description of class ProductoRefrigerado here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoRefrigerado extends Producto
{
    private String codigoOrgSupAlim;
    private double temperaturaRecomendada;
    
    public ProductoRefrigerado(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisOrigen, String codigoOrgSupAlim, double temperaturaRecomendada)
    {
       super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);
        this.codigoOrgSupAlim = codigoOrgSupAlim;
        this.temperaturaRecomendada = temperaturaRecomendada;   
       
    }
    public String getCodigoOrgSupAlim() {return codigoOrgSupAlim;}
    public double getTemperaturaRecomendada() {return temperaturaRecomendada;}
    
    public void setCodigoOrgSupAlim( String codigoOrgSupAlim) {
        this.codigoOrgSupAlim = codigoOrgSupAlim; }
    public void setTemperaturaRecomendada (double temperaturaRecomendada) {
        this.temperaturaRecomendada = temperaturaRecomendada; }
        
    public void muestraInfoProdRefrigerado() {
        System.out.println("Código del organismo de supervisión alimentaria: "+getCodigoOrgSupAlim() + " Temperatura Recomendada: "+ getTemperaturaRecomendada()+"°"); }
}
Clase Productos Congelados por aire
/**
 * Write a description of class ProductoCongeladoAire here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2/16
 */
import java.util.Calendar;
public class ProductoCongeladoAire extends ProductoCongelado
{
    private float porcNitrogeno;
    private float porcOxigeno;
    private float porcCO2;
    private float porcVaporAgua;
    /**
     * Constructor for objects of class ProductoCongeladoAire
     */
    public ProductoCongeladoAire()
    {
        super();
        porcNitrogeno = 0;
        porcOxigeno = 0;
        porcCO2 = 0;
        porcVaporAgua = 0;
    }
    public ProductoCongeladoAire(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant,
               float porcNitrogeno, float porcOxigeno, float porcCO2, float porcVaporAgua)
    {
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.porcNitrogeno = porcNitrogeno;
        this.porcOxigeno = porcOxigeno;
        this.porcCO2 = porcCO2;
        this.porcVaporAgua = porcVaporAgua;
    }
    public float getPorcNitrogeno() {return porcNitrogeno ;}
    public float getPorcOxigeno() {return porcOxigeno ;}
    public float getPorcCO2() {return porcCO2 ;}
    public float getPorcVaporAgua() {return porcVaporAgua ;}
    
    public void setPorcNitrogeno(float porcNitrogeno) {
        this.porcNitrogeno = porcNitrogeno;}
    public void setPorcOxigeno (float porcOxigeno) {
        this.porcOxigeno = porcOxigeno; }
    public void setPorcCO2 (float porcCO2) {
        this.porcCO2 = porcCO2;}
    public void setPorcVaporAgua (float porcVaporAgua) {
        this.porcVaporAgua = porcVaporAgua;}
        
    public void muestraComposicionAire() {
        System.out.println("La composición del aire es: Nitrogeno: "+ (porcNitrogeno*100)+" % Oxigeno: "+
         (porcOxigeno*100)+ "% Dioxido de Carbono: " + (porcCO2*100) + "% Vapor Agua: " + (porcVaporAgua * 100) +"%");}
}  
Clase Productos Congelados por  Agua
/**
 * Write a description of class ProductoCongeladoAgua here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongeladoAgua extends ProductoCongelado
{
    // instance variables - replace the example below with your own
    private float salinidadAgua;
    public ProductoCongeladoAgua()
    {
        super();
        salinidadAgua = 0;
    }
    public ProductoCongeladoAgua(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant, float salinidadAgua) 
    {
        super (fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.salinidadAgua = salinidadAgua;
    }
    
    public float getSalinidadAgua(){return salinidadAgua;}
    public void setSalinidadAgua(float salinidadAgua) {
        this.salinidadAgua = salinidadAgua; }
    public void mostrarProductoCongeladoAgua() {
        System.out.println("Salinidad del agua: " + getSalinidadAgua()+" gramos de sal por litro de agua");
    }
   
}
Clase Productos Congelados por Nitrógeno
/**
 * Write a description of class ProductoCongeladoNitrogeno here.
 * Ej. CU00687B
 * @Bettu 
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongeladoNitrogeno extends ProductoCongelado
{
    private String metodoCongelacion;
    private double tiempoExposicion;
    public ProductoCongeladoNitrogeno()
    {
        super();
        metodoCongelacion = "";
        tiempoExposicion = 0;
    }
    public ProductoCongeladoNitrogeno(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant, String metodoCongelacion,double tiempoExposicion )
    {
        super(fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
    
    
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public void setMetodoCongelacion( String metodoCongelacion) { this.metodoCongelacion = metodoCongelacion;}
    
    public double getTiempoExposicion() {return tiempoExposicion;}
    public void setTiempoExposicion(double tiempoExposicion) {this.tiempoExposicion = tiempoExposicion;}
    
    public void mostrarProductoCongeladoNitrogeno() {
        System.out.println("Método de Congelación: " + getMetodoCongelacion() + " Tiempo de exposición al nitrógeno: " +
        getTiempoExposicion() + " en segundos");
    }
}
Clase Principal
/**
 * testHerencia3B Uso de superclases intermedias
 * Fue realizada esta segunda prueba, debido a que si muestro al final como en el primer ejemplo que he realizado
 * en testHerencia3, no me aparecen las fechas correctas
 * Ejercicio CU00687B
 * @19/10/2016
 */
import java.util.Calendar;
public class testHerencia3B
{
    public static void main(String [] Args) {
        System.out.println("** LISTADO DE PRODUCTOS **");
        System.out.println("PRODUCTOS FRESCOS");
        Calendar fechaCad = Calendar.getInstance();
        fechaCad.set(2020,9,3);
        Calendar fechaEnv = Calendar.getInstance();
        fechaEnv.set(2016,3,24);
        ProductoFresco productoFresco1 = new ProductoFresco (fechaCad,101 , fechaEnv,"Chile");
        productoFresco1.muestraInfoProdFresco();
        fechaCad.set(2022,0,1);
        fechaEnv.set(2015,7,6);
        ProductoFresco productoFresco2 = new ProductoFresco (fechaCad, 102, fechaEnv,"Bolivia");
        productoFresco2.muestraInfoProdFresco();
        System.out.println("\n");
        System.out.println("PRODUCTOS REFRIGERADOS");
        fechaCad.set(2020,9,3);
        fechaEnv.set(2014,0,1);
        ProductoRefrigerado productoRefrigerado1 = new ProductoRefrigerado (fechaCad,201 , fechaEnv,"Argentina","CO21-21",21);productoRefrigerado1.mostrarDatosProducto();
        productoRefrigerado1.muestraInfoProdRefrigerado();
        fechaCad.set(2021,9,3);
        fechaEnv.set(2015,0,2);
        ProductoRefrigerado productoRefrigerado2 = new ProductoRefrigerado (fechaCad,202 , fechaEnv,"Uruguay","CO22-22",22);
        productoRefrigerado2.mostrarDatosProducto();
        productoRefrigerado2.muestraInfoProdRefrigerado();
        fechaCad.set(2022,9,3);
        fechaEnv.set(2016,0,3);
        ProductoRefrigerado productoRefrigerado3 = new ProductoRefrigerado (fechaCad,203 , fechaEnv,"Paraguay","CO23-23",23);
        productoRefrigerado3.mostrarDatosProducto();
        productoRefrigerado3.muestraInfoProdRefrigerado();
        
        System.out.println("\n");
        System.out.println("PRODUCTOS CONGELADOS");
        System.out.println("== AGUA ==");
        fechaCad.set(2023,9,21);
        fechaEnv.set(2011,0,11);
        ProductoCongeladoAgua productoCongeladoAgua1 = new ProductoCongeladoAgua (fechaCad,301 , fechaEnv,"Mexico",17,15);
        productoCongeladoAgua1.mostrarDatosProducto();
        productoCongeladoAgua1.muestraInfoProdCongelado();
        productoCongeladoAgua1.mostrarProductoCongeladoAgua();
        fechaCad.set(2024,10,3);
        fechaEnv.set(2012,0,12);
        ProductoCongeladoAgua productoCongeladoAgua2 = new ProductoCongeladoAgua (fechaCad,301 , fechaEnv,"Colombia",17,15);
        productoCongeladoAgua2.mostrarDatosProducto();
        productoCongeladoAgua2.muestraInfoProdCongelado();
        productoCongeladoAgua2.mostrarProductoCongeladoAgua();
        System.out.println("== AIRE ==");
        fechaCad.set(2025,1,25);
        fechaEnv.set(2007,0,7);
        ProductoCongeladoAire productoCongeladoAire1 = new ProductoCongeladoAire (fechaCad, 401, fechaEnv,"Venezuela",11,0.78F,0.21F,0.0003F,0.0097F);
        productoCongeladoAire1.mostrarDatosProducto();
        productoCongeladoAire1.muestraInfoProdCongelado();
        productoCongeladoAire1.muestraComposicionAire();
        fechaCad.set(2026,2,26);
        fechaEnv.set(2010,0,10);
        ProductoCongeladoAire productoCongeladoAire2 = new ProductoCongeladoAire (fechaCad, 402, fechaEnv,"Perú",12,0.77F,0.22F,0.0003F,0.0097F);
        productoCongeladoAire2.mostrarDatosProducto();
        productoCongeladoAire2.muestraInfoProdCongelado();
        productoCongeladoAire2.muestraComposicionAire();
        System.out.println("== NITROGENO ==");
        fechaCad.set(2030,10,9);
        fechaEnv.set(2006,0,6);
        ProductoCongeladoNitrogeno productoCongeladoNitrogeno1 = new ProductoCongeladoNitrogeno (fechaCad,501 , fechaEnv,"México",15,"Nitrogeno Líquido",10);
        productoCongeladoNitrogeno1.mostrarDatosProducto();
        productoCongeladoNitrogeno1.muestraInfoProdCongelado();
        productoCongeladoNitrogeno1.mostrarProductoCongeladoNitrogeno();
        System.out.println("** FIN LISTADO DE PRODUCTOS **");
   }
}