Autor Tema: Concepto de polimorfismo y variables polimórficas en Java ejemplo CU00688B  (Leído 3209 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noches.

Mediante la siguiente respuesta autocorrigo mi ejercicio.

Quiero decir que me ha servido de gran ayuda el siguiente hilo:

https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0

El ejercicio pedía:

Citar
EJERCICIO

Amplía el código del programa Java que planteamos como ejercicio en la entrega CU00687 de este curso, relativo a la gestión de una empresa agroalimentaria, teniendo en cuenta que la empresa gestiona envíos a través de diferentes medios, y un envío puede contener cierto número de productos frescos, refrigerados o congelados. Añade al código:

a) Una clase EnvioDeProductos que represente un envío de productos como colección de objetos que admite el polimorfismo.

b) Crear una clase testHerencia4 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por aire y 1 por nitrógeno). Crear un envío que represente la agrupación de los anteriores productos. Mostrar por pantalla la información del número de productos que componen el envío y recorrer los productos del envío usando iterator para mostrar la información (valor de los atributos) de cada uno de ellos.

A continuación los códigos de las clases necesarias para poder funcionar el programa.

El código de la clase "Producto":

Código: [Seleccionar]
public class Producto{
    private String fechaCaducidad;
    private int numeroLote;
    private String fechaEnvase;
    private String paisOrigen;
   
    public Producto(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvase = fechaEnvase;
        this.paisOrigen = paisOrigen;
    }
   
    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad = fechaCaducidad;
    }
   
    public void setNumeroLote(int numeroLote){
        this.numeroLote = numeroLote;
    }
   
    public void setFechaEnvase(String fechaEnvase){
        this.fechaEnvase = fechaEnvase;
    }
   
    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen = paisOrigen;
    }
   
    public String getFechaCaducidad(){return fechaCaducidad;}
    public int getNumeroLote(){return numeroLote;}
    public String getFechaEnvase(){return fechaEnvase;}
    public String getPaisOrigen(){return paisOrigen;}
   
    public void mostrarInfoProducto(){
        System.out.print("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+" y fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen());
    }
}

El código de la clase "ProductoFresco":

Código: [Seleccionar]
public class ProductoFresco extends Producto{
   
    public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
    }
   
    public void mostrarInfoProductoFresco(){
         mostrarInfoProducto();
         System.out.println();
    }
}

El código de la clase "ProductoRefrigeradoYCongelado" (es una clase "intermedia"):

Código: [Seleccionar]
public class ProductoRefrigeradoYCongelado extends Producto{
    private float temperaturaMantenemientoRecom;
   
    public ProductoRefrigeradoYCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public void setTemperaturaMantenemientoRecom(float temperaturaMantenemientoRecom){
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }

    public float getTemperaturaMantenemientoRecom(){return temperaturaMantenemientoRecom;}
   
    public void mostrarInfoProductoRefrigeradoYCongelado(){
        mostrarInfoProducto();
        System.out.print(" y tiene una temperatura de mantenemiento recomendad de: "+getTemperaturaMantenemientoRecom()+"C");
    }
}

El código de la clase "ProductoRefrigerado":

Código: [Seleccionar]
public class ProductoRefrigerado extends ProductoRefrigeradoYCongelado{
    private int codigoOrganismoSupervision;
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvase,  String paisOrigen, float temperaturaMantenemientoRecom, int codigoOrganismoSupervision){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public void setCodigoOrganismoSupervision(int codigoOrganismoSupervision){
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public int getCodigoOrganismoSupervision(){return codigoOrganismoSupervision;}
   
    public void mostrarInfoProductoRefrigerado(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y un código de Organismo de Supervisión: "+getCodigoOrganismoSupervision()+"\n");
    }
}

El código de la clase "ProductoCongelado":

Código: [Seleccionar]
public class ProductoCongelado extends ProductoRefrigeradoYCongelado{
   
    public ProductoCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
    }
   
    public void mostrarInfoProductoCongelado(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.println();
    }
}

El código de la clase "ProductoCongeladoPorAire":

Código: [Seleccionar]
public class ProductoCongeladoPorAire extends ProductoCongelado{
    private float nitrogeno;
    private float oxigeno;
    private float co2;
    private float vaporAgua;
   
    public ProductoCongeladoPorAire(String fechaCaducidad, int numeroLote,  String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, float nitrogeno, float oxigeno, float co2, float vaporAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.co2 = co2;
        this.vaporAgua = vaporAgua;
    }
   
    public void setNitrogeno(float nitrogeno){
        this.nitrogeno = nitrogeno;
    }
   
    public void setOxigeno(float oxigeno){
        this.oxigeno = oxigeno;
    }
   
    public void setCo2(float co2){
        this.co2 = co2;
    }
   
    public void setVaporAgua(float vaporAgua){
        this.vaporAgua = vaporAgua;
    }
   
    public float getNitrogeno(){return nitrogeno;}
    public float getOxigeno(){return oxigeno;}
    public float getCo2(){return co2;}
    public float getVaporAgua(){return vaporAgua;}
   
    public void mostrarInfoProductoCongeladoPorAire(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tiene una composición de aire como sigue: ");
        System.out.println("Nitrógeno: "+getNitrogeno()+"%");
        System.out.println("Oxígeno: "+getOxigeno()+"%");
        System.out.println("Dióxido de carbono: "+getCo2()+"%");
        System.out.println("Vapor de agua: "+getVaporAgua()+"%");
    }
}

El código de la clase "ProductoCongeladoPorAgua":

Código: [Seleccionar]
public class ProductoCongeladoPorAgua extends ProductoCongelado{
    private float salinidadAgua;
   
    public ProductoCongeladoPorAgua(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom ,float salinidadAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.salinidadAgua = salinidadAgua;
    }
   
    public void setSalinidadAgua(float salinidadAgua){
        this.salinidadAgua = salinidadAgua;
    }
   
    public float getSalinidadAgua(){return salinidadAgua;}
   
    public void mostrarInfoProductoCongeladoPorAgua(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tiene un porcentaje de salinidad: "+getSalinidadAgua()+"gr sal por litro de agua\n");
    }
}

El código de la clase "ProductoCongeladoPorNitrogeno":

Código: [Seleccionar]
public class ProductoCongeladoPorNitrogeno extends ProductoCongelado{
    private String metodoCongelacion;
    private int tiempoExposicion;
   
    public ProductoCongeladoPorNitrogeno(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, String metodoCongelacion, int tiempoExposicion){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion = metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public int getTiempoExposicion(){return tiempoExposicion;}
   
    public void mostrarInfoProductoCongeladoPorNitrogeno(){
        mostrarInfoProductoRefrigeradoYCongelado();
        System.out.print(" y tuvo un método de congelación: "+getMetodoCongelacion()+" y estuvo expuesto al nitrógeno: "+getTiempoExposicion()+"s\n");
    }
}

El código de la clase "EnvioDeProductos":

Código: [Seleccionar]
import java.util.ArrayList;

public class EnvioDeProductos{
    //Definimos una variable de clase "ArrayList" de tipo "Producto"
    private ArrayList<ProductoFresco> productosFrescos;
    private ArrayList<ProductoRefrigerado> productosRefrigerados;
    private ArrayList<ProductoCongeladoPorAgua> productosCongeladosPorAgua;
    private ArrayList<ProductoCongeladoPorAire> productosCongeladosPorAire;
    private ArrayList<ProductoCongeladoPorNitrogeno> productosCongeladosPorNitrogeno;
   
    //Inicializamos la variable como un objeto nuevo de clase "ArrayList" de tipo "Producto"
    public EnvioDeProductos(){
        productosFrescos = new ArrayList<ProductoFresco>();
        productosRefrigerados = new ArrayList<ProductoRefrigerado>();
        productosCongeladosPorAgua = new ArrayList<ProductoCongeladoPorAgua>();
        productosCongeladosPorAire = new ArrayList<ProductoCongeladoPorAire>();
        productosCongeladosPorNitrogeno = new ArrayList<ProductoCongeladoPorNitrogeno>();
    }
   
    //Creación y inclusión de los objetos objetos
    public void crearPedido(){
        productosFrescos.add(new ProductoFresco("23-06-2016",1234, "05-01-2016","Argentina"));
        productosFrescos.add(new ProductoFresco("22-06-2016",987,"09-10-2016","España"));
        productosRefrigerados.add(new ProductoRefrigerado("10-10-2016",345,"01-03-2016","Ecuador",5, 3452));
        productosRefrigerados.add(new ProductoRefrigerado("11-10-2016",346,"02-03-2016","Colombia",5, 5421));
        productosRefrigerados.add(new ProductoRefrigerado("12-10-2016",347,"03-03-2016","Marruecos",5, 1231));
        productosCongeladosPorAgua.add(new ProductoCongeladoPorAgua("13-06-2016",908,"12-05-2016","Argentina",-18,40));
        productosCongeladosPorAgua.add(new ProductoCongeladoPorAgua("13-08-2016",988,"11-06-2016","España",-15,35));
        productosCongeladosPorAire.add(new ProductoCongeladoPorAire("11-08-2016",354,"02-03-2016","Puerto Rico",-22,20,20,30,30));
        productosCongeladosPorAire.add(new ProductoCongeladoPorAire("11-11-2016",428,"08-08-2016","Francia",-10,10,20,30,40));
        productosCongeladosPorNitrogeno.add(new ProductoCongeladoPorNitrogeno("10-08-2016",846,"05-05-2016","Suiza",-20,"Tradicional",200));
    }
   
    //Invocación de los métodos de cada objeto.
    public void imprimirPedido(){
        System.out.println("Productos Frescos:");
        for(ProductoFresco producto: productosFrescos){
            producto.mostrarInfoProductoFresco();
        }
        System.out.println("Productos Refrigerados:");
        for(ProductoRefrigerado producto: productosRefrigerados){
            producto.mostrarInfoProductoRefrigerado();
        }
        System.out.println("Productos Congelados por Agua:");
        for(ProductoCongeladoPorAgua producto: productosCongeladosPorAgua){
            producto.mostrarInfoProductoCongeladoPorAgua();
        }
        System.out.println("Productos Congelados por Aire:");
        for(ProductoCongeladoPorAire producto: productosCongeladosPorAire){
            producto.mostrarInfoProductoCongeladoPorAire();
        }
        System.out.println("Productos Congelados por Nitrógeno:");
        for(ProductoCongeladoPorNitrogeno producto: productosCongeladosPorNitrogeno){
            producto.mostrarInfoProductoCongeladoPorNitrogeno();
        }
    }
}

El código de la clase main  "TestHerencia4":

Código: [Seleccionar]
import java.util.Calendar;
import java.util.GregorianCalendar;

public class TestHerencia4{
    public static void main(String []Args){
       
        //Creamos un objeto de tipo "EnvioDeProductos"
        EnvioDeProductos envioDeProductos = new EnvioDeProductos();
       
        //Creamos el pedido (los objetos) mediante la invocación del método crearPedido() del objeto "envioDeProductos" de tipo "EnvioDeProductos"
        envioDeProductos.crearPedido();
       
        //Invocamos el método "imprimirPedido()" para mostrar por pantalla el pedido completo
        envioDeProductos.imprimirPedido();
       
        //Mediante el objeto "Calendar" de Java y con el método "getTime()" hacemos visible la hora actual.
        Calendar hora = GregorianCalendar.getInstance();
        System.out.println("La hora y el día en el cual fue hecho el pedido: "+hora.getTime());
    }
}

Espero que se entienda todo y que esté en lo acierto :)

Recomiendo, de verdad, el estudio detallado del programa del hilo: (a mí me ayudo bastante)

https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0

Gracias

PD: Incluyo el esquema como foto.
« Última modificación: 16 de Marzo 2016, 22:04 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenas tardes

Tienes un fallo de concepto.

Un envío de productos es una agrupación o colección de productos.

Polimorfismo significa que una cosa puede ser de varios tipos.

En la clase EnvioDeProductos no estás haciendo uso del polimorfismo:

Código: [Seleccionar]
     private ArrayList<ProductoFresco> productosFrescos;
    private ArrayList<ProductoRefrigerado> productosRefrigerados;
    private ArrayList<ProductoCongeladoPorAgua> productosCongeladosPorAgua;
    private ArrayList<ProductoCongeladoPorAire> productosCongeladosPorAire;
    private ArrayList<ProductoCongeladoPorNitrogeno> productosCongeladosPorNitrogeno;

Aquí lo que tienes son cinco colecciones de objetos donde cada colección admite un tipo único. Esto te obliga a escribir las cosas cinco veces.

Pero la idea no es esa: la idea es tener una colección de objetos de un tipo (Producto) que admita objetos de distintos tipos (ProductoFresco, ProductoRefrigerado, etc.). Y donde solo tendremos que escribir las cosas una única vez.

¿Cómo hacemos esto en Java?

Fíjate en cómo se hace en la solución propuesta en https://www.aprenderaprogramar.com/foros/index.php?topic=2959.0

Ahí verás que no nos hacen falta 5 ArrayList. Con un ArrayList de Producto nos es suficiente, porque gracias a la herencia esta colección admitirá un objeto de cualquier tipo que sea un subtipo de Producto, es decir, admitirá productos frescos, refrigerados, etc.

Fíjate también en ese ejercicio cómo se crean los productos:

Producto productoRefrigerado1 = new ProductoRefrigerado("15/04/2017", 48688, 14423557);

Este producto tiene declarado el tipo estático Producto, mientras que su tipo dinámico es ProductoRefrigerado: es las dos cosas al mismo tiempo. Normalmente declararemos como tipo estático el de una superclase (o interface) y como tipo dinámico el de una clase concreta.

Saludos

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes, Mario.

Tienes razón, había creado 5 listas en vez de 1.

Y tampoco había recorrido los objetos mediante iterator, sino con un for each.

Procedo a colgar, de nuevo, los códigos.

El código de la clase "Producto":

Código: [Seleccionar]
public class Producto{
    private String fechaCaducidad;
    private int numeroLote;
    private String fechaEnvase;
    private String paisOrigen;
   
    public Producto(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvase = fechaEnvase;
        this.paisOrigen = paisOrigen;
    }
   
    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad = fechaCaducidad;
    }
   
    public void setNumeroLote(int numeroLote){
        this.numeroLote = numeroLote;
    }
   
    public void setFechaEnvase(String fechaEnvase){
        this.fechaEnvase = fechaEnvase;
    }
   
    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen = paisOrigen;
    }
   
    public String getFechaCaducidad(){return fechaCaducidad;}
    public int getNumeroLote(){return numeroLote;}
    public String getFechaEnvase(){return fechaEnvase;}
    public String getPaisOrigen(){return paisOrigen;}
   
    public void mostrarInfoProducto(){
        System.out.print("El producto: "+getNumeroLote()+" con fecha de envase: "+getFechaEnvase()+" y fecha de caducidad: "+getFechaCaducidad()+" proviene de: "+getPaisOrigen());
    }
}

El código de la clase "ProductoFresco":

Código: [Seleccionar]
public class ProductoFresco extends Producto{
   
    public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
    }
   
    public void mostrarInfoProducto(){
         System.out.println("PRODUCTO FRESCO:");
         super.mostrarInfoProducto();
         System.out.println();
    }
}

El código de la clase "ProductoRefrigeradoOCongelado":

Código: [Seleccionar]
public class ProductoRefrigeradoOCongelado extends Producto{
    private float temperaturaMantenemientoRecom;
   
    public ProductoRefrigeradoOCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen);
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }
   
    public void setTemperaturaMantenemientoRecom(float temperaturaMantenemientoRecom){
        this.temperaturaMantenemientoRecom = temperaturaMantenemientoRecom;
    }

    public float getTemperaturaMantenemientoRecom(){return temperaturaMantenemientoRecom;}
   
    public void mostrarInfoProducto(){
        super.mostrarInfoProducto();
        System.out.print(" y tiene una temperatura de mantenemiento recomendad de: "+getTemperaturaMantenemientoRecom()+"C");
    }
}

El código de la clase "ProductoRefrigerado":

Código: [Seleccionar]
public class ProductoRefrigerado extends ProductoRefrigeradoOCongelado{
    private int codigoOrganismoSupervision;
   
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvase,  String paisOrigen, float temperaturaMantenemientoRecom, int codigoOrganismoSupervision){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public void setCodigoOrganismoSupervision(int codigoOrganismoSupervision){
        this.codigoOrganismoSupervision = codigoOrganismoSupervision;
    }
   
    public int getCodigoOrganismoSupervision(){return codigoOrganismoSupervision;}
   
    public void mostrarInfoProducto(){
        System.out.println("PRODUCTO REFRIGERADO:");
        super.mostrarInfoProducto();
        System.out.print(" y un código de Organismo de Supervisión: "+getCodigoOrganismoSupervision()+"\n");
    }
}

El código de la clase "ProductoCongelado":

Código: [Seleccionar]
public class ProductoCongelado extends ProductoRefrigeradoOCongelado{
   
    public ProductoCongelado(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
    }
   
    public void mostrarInfoProducto(){
        super.mostrarInfoProducto();
        System.out.println();
    }
}

El código de la clase "ProductoCongeladoPorAire":

Código: [Seleccionar]
public class ProductoCongeladoPorAire extends ProductoCongelado{
    private float nitrogeno;
    private float oxigeno;
    private float co2;
    private float vaporAgua;
   
    public ProductoCongeladoPorAire(String fechaCaducidad, int numeroLote,  String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, float nitrogeno, float oxigeno, float co2, float vaporAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.co2 = co2;
        this.vaporAgua = vaporAgua;
    }
   
    public void setNitrogeno(float nitrogeno){
        this.nitrogeno = nitrogeno;
    }
   
    public void setOxigeno(float oxigeno){
        this.oxigeno = oxigeno;
    }
   
    public void setCo2(float co2){
        this.co2 = co2;
    }
   
    public void setVaporAgua(float vaporAgua){
        this.vaporAgua = vaporAgua;
    }
   
    public float getNitrogeno(){return nitrogeno;}
    public float getOxigeno(){return oxigeno;}
    public float getCo2(){return co2;}
    public float getVaporAgua(){return vaporAgua;}
   
    public void mostrarInfoProducto(){
        System.out.println("PRODUCTO CONGELADO POR AIRE:");
        super.mostrarInfoProducto();
        System.out.print(" y tiene una composición de aire como sigue: ");
        System.out.println("Nitrógeno: "+getNitrogeno()+"%");
        System.out.println("Oxígeno: "+getOxigeno()+"%");
        System.out.println("Dióxido de carbono: "+getCo2()+"%");
        System.out.println("Vapor de agua: "+getVaporAgua()+"%");
    }
}

El código de la clase "ProductoCongeladoPorAgua":

Código: [Seleccionar]
public class ProductoCongeladoPorAgua extends ProductoCongelado{
    private float salinidadAgua;
   
    public ProductoCongeladoPorAgua(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom ,float salinidadAgua){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.salinidadAgua = salinidadAgua;
    }
   
    public void setSalinidadAgua(float salinidadAgua){
        this.salinidadAgua = salinidadAgua;
    }
   
    public float getSalinidadAgua(){return salinidadAgua;}
   
    public void mostrarInfoProducto(){
        System.out.println("PRODUCTO CONGELADO POR AGUA:");
        super.mostrarInfoProducto();
        System.out.print(" y tiene un porcentaje de salinidad: "+getSalinidadAgua()+"gr sal por litro de agua\n");
    }
}

El código de la clase "ProductoCongeladoPorNitrogeno":

Código: [Seleccionar]
public class ProductoCongeladoPorNitrogeno extends ProductoCongelado{
    private String metodoCongelacion;
    private int tiempoExposicion;
   
    public ProductoCongeladoPorNitrogeno(String fechaCaducidad, int numeroLote, String fechaEnvase, String paisOrigen, float temperaturaMantenemientoRecom, String metodoCongelacion, int tiempoExposicion){
        super(fechaCaducidad, numeroLote, fechaEnvase, paisOrigen, temperaturaMantenemientoRecom);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion = metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public int getTiempoExposicion(){return tiempoExposicion;}
   
    public void mostrarInfoProducto(){
        System.out.println("PRODUCTO CONGELADO POR NITROGENO:");
        super.mostrarInfoProducto();
        System.out.print(" y tuvo un método de congelación: "+getMetodoCongelacion()+" y estuvo expuesto al nitrógeno: "+getTiempoExposicion()+"s\n");
    }
}

El código de la clase "EnvioDeProductos":

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;

public class EnvioDeProductos{
    //Definimos una variable de clase "ArrayList" de tipo "Producto"
    private ArrayList<Producto> listaPedido;
   
    //Inicializamos la variable como un objeto nuevo de clase "ArrayList" de tipo "Producto"
    public EnvioDeProductos(){
        listaPedido = new ArrayList<Producto>();
    }
   
    //Creación y inclusión de los objetos objetos
    public void crearPedido(){
        listaPedido.add(new ProductoFresco("23-06-2016",1234, "05-01-2016","Argentina"));
        listaPedido.add(new ProductoFresco("22-06-2016",987,"09-10-2016","España"));
        listaPedido.add(new ProductoRefrigerado("10-10-2016",345,"01-03-2016","Ecuador",5, 3452));
        listaPedido.add(new ProductoRefrigerado("11-10-2016",346,"02-03-2016","Colombia",5, 5421));
        listaPedido.add(new ProductoRefrigerado("12-10-2016",347,"03-03-2016","Marruecos",5, 1231));
        listaPedido.add(new ProductoCongeladoPorAgua("13-06-2016",908,"12-05-2016","Argentina",-18,40));
        listaPedido.add(new ProductoCongeladoPorAgua("13-08-2016",988,"11-06-2016","España",-15,35));
        listaPedido.add(new ProductoCongeladoPorAire("11-08-2016",354,"02-03-2016","Puerto Rico",-22,20,20,30,30));
        listaPedido.add(new ProductoCongeladoPorAire("11-11-2016",428,"08-08-2016","Francia",-10,10,20,30,40));
        listaPedido.add(new ProductoCongeladoPorNitrogeno("10-08-2016",846,"05-05-2016","Suiza",-20,"Tradicional",200));
    }
   
    //Invocación de los métodos de cada objeto.
    public void imprimirPedido(){
        Iterator<Producto> it = listaPedido.iterator();
        while(it.hasNext()){
            it.next().mostrarInfoProducto();
        }
    }
}

El código de la clase "TestHerencia4":

Código: [Seleccionar]
import java.util.Calendar;
import java.util.GregorianCalendar;

public class TestHerencia4{
    public static void main(String []Args){
       
        //Creamos un objeto de tipo "EnvioDeProductos"
        EnvioDeProductos envioDeProductos = new EnvioDeProductos();
       
        //Creamos el pedido (los objetos) mediante la invocación del método crearPedido() del objeto "envioDeProductos" de tipo "EnvioDeProductos"
        envioDeProductos.crearPedido();
       
        //Invocamos el método "imprimirPedido()" para mostrar por pantalla el pedido completo
        envioDeProductos.imprimirPedido();
       
        //Mediante el objeto "Calendar" de Java y con el método "getTime()" hacemos visible la hora actual.
        Calendar hora = GregorianCalendar.getInstance();
        System.out.println();
        System.out.println("La hora y el día en el cual fue hecho el pedido: "+hora.getTime());
    }
}

Miré la solución de "pedro,," que me recomendaste.

Gracias.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".