Hola Alex !! Primero quiero agradecerte por tu tiempo en la corrección que por cierto fue bastante benévola conmigo
![Sonrisa :)](https://aprenderaprogramar.com/foros/Smileys/default/smiley.gif)
. Desde ya, muchisimas gracias por todo.
Con respecto al ejercicio que pusiste como ejemplo (muy bien planteado y resuelto), y comparándolo con el mio, noté que lamentablemente lo resolví para la impresión en forma incompleta ya que usé una sola lista con los datos de la clase super Producto. Por lo tanto, tuve que reescribir el código de las clases para que se muestre herencia en atributos y principalmente en métodos y poder listar todos los productos con todos sus detalles.
Habrás notado que usé 2 clases enum que quedaron como "adornos" porque en una primera programación era una forma de chequear que lo que se ingresaba por consola era acorde a las clases definidas. Decidí no borrarlas y me tomé la licencia de usarlas de esta forma: en la clase enum TipoDeProducto (FRESCO, REFRIGERADO, CONGELADO) definí el plazo de caducidad, que para los frescos son 7 dias, refrigerados 15 dias y congelados 90 dias, y así poder calcular la fecha de caducidad por código. Para la clase enum TipoDeCongelado (AIRE,AGUA,NITROGENO) definí la temperatura de congelamiento según el método usado y evitar la carga del mismo.
También usé una clase para manejar las fechas como Calendar y tratar que la clase Test (método main) solo tenga la carga en lote de los productos y tratando de hacerla lo mas simple posible.
A continuación dejo las clases usadas.
Cordialmente,
Luis
Clase TestHerencia3
import java.util.Calendar;
public class TestHerencia3 {
public static void main (String [ ] args) {
TipoDeProducto tipoProducto=TipoDeProducto.FRESCO;
TipoDeCongelado tipoCongelado=TipoDeCongelado.AIRE;
//
Calendar fechaEnvasado;
Calendar fechaCaducidad;
fechaEnvasado=Calendar.getInstance();
fechaCaducidad=Calendar.getInstance();
ListaProductos lista = new ListaProductos("Lista de productos");
// carga de productos
FechasProducto fecha = new FechasProducto();
fecha.setFechaEnvasado(8,8,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.FRESCO.getPlazoDuracion());
ProductoFresco prodFres1 = new ProductoFresco("PROD. FRESCO 1", 11, "ARGENTINA", fechaEnvasado, fechaCaducidad);
lista.addListaFrescos("PROD. FRESCO 1", 11, "ARGENTINA", fechaEnvasado, fechaCaducidad);
fecha.setFechaEnvasado(13,8,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.FRESCO.getPlazoDuracion());
ProductoFresco prodFres2 = new ProductoFresco("PROD. FRESCO 2", 12, "CHILE", fechaEnvasado, fechaCaducidad);
lista.addListaFrescos("PROD. FRESCO 2", 12, "CHILE", fechaEnvasado, fechaCaducidad);
fecha.setFechaEnvasado(18,8,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.REFRIGERADO.getPlazoDuracion());
ProductoRefrigerado prodRefr1 = new ProductoRefrigerado("PROD. REFRIGERADO 1", 21, "URUGUAY", fechaEnvasado, fechaCaducidad, 1.5, "ORG.SUPERVISION 1");
lista.addListaRefrigerados("PROD. REFRIGERADO 1", 21, "URUGUAY", fechaEnvasado, fechaCaducidad, 1.5, "ORG.SUPERVISION 1");
fecha.setFechaEnvasado(23,8,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.REFRIGERADO.getPlazoDuracion());
ProductoRefrigerado prodRefr2 = new ProductoRefrigerado("PROD. REFRIGERADO 2", 22, "BOLIVIA", fechaEnvasado, fechaCaducidad, 2.6, "ORG.SUPERVISION 2");
lista.addListaRefrigerados("PROD. REFRIGERADO 2", 22, "BOLIVIA", fechaEnvasado, fechaCaducidad, 1.6, "ORG.SUPERVISION 2");
fecha.setFechaEnvasado(28,8,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.REFRIGERADO.getPlazoDuracion());
ProductoRefrigerado prodRefr3 = new ProductoRefrigerado("PROD. REFRIGERADO 3", 23, "PARAGUAY", fechaEnvasado, fechaCaducidad, 3.7, "ORG.SUPERVISION 3");
lista.addListaRefrigerados("PROD. REFRIGERADO 3", 23, "PARAGUAY", fechaEnvasado, fechaCaducidad, 1.7, "ORG.SUPERVISION 3");
fecha.setFechaEnvasado(2,9,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.CONGELADO.getPlazoDuracion());
ProductoCongeladoPorAgua prodCongAgua1 = new ProductoCongeladoPorAgua("PROD. CONG x AGUA 1", 31, "PERU", fechaEnvasado, fechaCaducidad, tipoCongelado.AGUA.getTemperaturaCongelado(), 20);
lista.addListaCongeladosPorAgua("PROD. CONG x AGUA 1", 31, "PERU", fechaEnvasado, fechaCaducidad, tipoCongelado.AGUA.getTemperaturaCongelado(), 20);
fecha.setFechaEnvasado(7,9,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.CONGELADO.getPlazoDuracion());
ProductoCongeladoPorAgua prodCongAgua2 = new ProductoCongeladoPorAgua("PROD. CONG x AGUA 2", 32, "ECUADOR", fechaEnvasado, fechaCaducidad, tipoCongelado.AGUA.getTemperaturaCongelado(), 21);
lista.addListaCongeladosPorAgua("PROD. CONG x AGUA 2", 32, "ECUADOR", fechaEnvasado, fechaCaducidad, tipoCongelado.AGUA.getTemperaturaCongelado(), 21);
fecha.setFechaEnvasado(12,9,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.CONGELADO.getPlazoDuracion());
ProductoCongeladoPorAire prodCongAire1 = new ProductoCongeladoPorAire("PROD. CONG x AIRE 1", 41, "BRASIL", fechaEnvasado, fechaCaducidad, tipoCongelado.AIRE.getTemperaturaCongelado(), 1, 2, 3, 4);
lista.addListaCongeladosPorAire("PROD. CONG x AIRE 1", 41, "BRASIL", fechaEnvasado, fechaCaducidad, tipoCongelado.AIRE.getTemperaturaCongelado(), 1, 2, 3, 4);
fecha.setFechaEnvasado(17,9,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.CONGELADO.getPlazoDuracion());
ProductoCongeladoPorAire prodCongAire2 = new ProductoCongeladoPorAire("PROD. CONG x AIRE 2", 42, "COLOMBIA", fechaEnvasado, fechaCaducidad, tipoCongelado.AIRE.getTemperaturaCongelado(), 5, 6, 7, 8);
lista.addListaCongeladosPorAire("PROD. CONG x AIRE 2", 42, "COLOMBIA", fechaEnvasado, fechaCaducidad, tipoCongelado.AIRE.getTemperaturaCongelado(), 5, 6, 7, 8);
fecha.setFechaEnvasado(22,9,2017);
fechaEnvasado=fecha.getFechaEnvasado(); fechaCaducidad=fecha.getFechaCaducidad();
fechaCaducidad.add(Calendar.DAY_OF_MONTH, tipoProducto.CONGELADO.getPlazoDuracion());
ProductoCongeladoPorNitrogeno prodCongNitrogeno1 = new ProductoCongeladoPorNitrogeno("PROD. CONG x NITROGENO 1", 51, "VENEZUELA", fechaEnvasado, fechaCaducidad, tipoCongelado.NITROGENO.getTemperaturaCongelado(), 10, "METODO NITROGENO");
lista.addListaCongeladosPorNitrogeno("PROD. CONG x NITROGENO 1", 51, "VENEZUELA", fechaEnvasado, fechaCaducidad, tipoCongelado.NITROGENO.getTemperaturaCongelado(), 10, "METODO NITROGENO");
// lista de productos
lista.listaProductosFrescos();
lista.listaProductosRefrigerados();
lista.listaProductosCongeladosPorAgua();
lista.listaProductosCongeladosPorAire();
lista.listaProductosCongeladosPorNitrogeno();
}
}
Clase ListaProductos
import java.util.*;
public class ListaProductos {
private ArrayList<ProductoFresco> listaDeProductosFrescos;
private ArrayList<ProductoRefrigerado> listaDeProductosRefrigerados;
private ArrayList<ProductoCongeladoPorAgua> listaDeProductosCongeladosPorAgua;
private ArrayList<ProductoCongeladoPorAire> listaDeProductosCongeladosPorAire;
private ArrayList<ProductoCongeladoPorNitrogeno> listaDeProductosCongeladosPorNitrogeno;
public ListaProductos (String nombre) { //Constructor: crea una lista de nombres vacía
listaDeProductosFrescos = new ArrayList<ProductoFresco>();
listaDeProductosRefrigerados = new ArrayList<ProductoRefrigerado>();
listaDeProductosCongeladosPorAgua = new ArrayList<ProductoCongeladoPorAgua>();
listaDeProductosCongeladosPorAire = new ArrayList<ProductoCongeladoPorAire>();
listaDeProductosCongeladosPorNitrogeno = new ArrayList<ProductoCongeladoPorNitrogeno>();
} //Cierre del constructor
public void addListaFrescos(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad) {
ProductoFresco productoFresco = new ProductoFresco(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad);
listaDeProductosFrescos.add(productoFresco);
} //Cierre del método
public void addListaRefrigerados(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, String organismoSupervision) {
ProductoRefrigerado productoR = new ProductoRefrigerado(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento, organismoSupervision);
listaDeProductosRefrigerados.add(productoR);
} //Cierre del método
public void addListaCongeladosPorAgua(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, int salinidadAgua) {
ProductoCongeladoPorAgua productoCongAgua = new ProductoCongeladoPorAgua(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento, salinidadAgua);
listaDeProductosCongeladosPorAgua.add(productoCongAgua);
} //Cierre del método
public void addListaCongeladosPorAire(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, float valorN, float valorO, float valorCO2, float valorH2O) {
ProductoCongeladoPorAire productoCongAire = new ProductoCongeladoPorAire(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento, valorN, valorO, valorCO2, valorH2O);
listaDeProductosCongeladosPorAire.add(productoCongAire);
} //Cierre del método
public void addListaCongeladosPorNitrogeno(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, int tiempoExposicion, String metodoEmpleado) {
ProductoCongeladoPorNitrogeno productoCongNitrogeno = new ProductoCongeladoPorNitrogeno(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento, tiempoExposicion, metodoEmpleado);
listaDeProductosCongeladosPorNitrogeno.add(productoCongNitrogeno);
} //Cierre del método
public void listaProductosFrescos(){
System.out.println("------------- PRODUCTOS FRESCOS --------------");
for (ProductoFresco tmp:listaDeProductosFrescos){
tmp.listaProductoFresco();
System.out.println("");}
}
public void listaProductosRefrigerados(){
System.out.println("----------- PRODUCTOS REFRIGERADOS -----------");
for (ProductoRefrigerado tmp:listaDeProductosRefrigerados){
tmp.listaProductoRefrigerado();
System.out.println("");}
}
public void listaProductosCongeladosPorAgua(){
System.out.println("------- PRODUCTOS CONGELADOS POR AGUA --------");
for (ProductoCongeladoPorAgua tmp:listaDeProductosCongeladosPorAgua){
tmp.listaProductoCongeladoPorAgua();
System.out.println("");}
}
public void listaProductosCongeladosPorAire(){
System.out.println("------- PRODUCTOS CONGELADOS POR AIRE --------");
for (ProductoCongeladoPorAire tmp:listaDeProductosCongeladosPorAire){
tmp.listaProductoCongeladoPorAire();
System.out.println("");}
}
public void listaProductosCongeladosPorNitrogeno(){
System.out.println("----- PRODUCTOS CONGELADOS POR NITROGENO -----");
for (ProductoCongeladoPorNitrogeno tmp:listaDeProductosCongeladosPorNitrogeno){
tmp.listaProductoCongeladoPorNitrogeno();
System.out.println("");}
}
} //Cierre de la clase
Clase Producto
import java.util.Calendar;
/**
* Write a description of class Producto here.
*
* @author Luis
* @version CU00686B
*/
public class Producto
{
// instance variables - replace the example below with your own
public String nombreProducto;
public int nroLote;
public String paisOrigen;
Calendar fechaEnvasado;
Calendar fechaCaducidad;
/**
* Constructor for objects of class Productos
*/
public Producto(){
nombreProducto="";
nroLote=0;
paisOrigen="";
fechaEnvasado=Calendar.getInstance();
fechaCaducidad=Calendar.getInstance();
}
public Producto(String nombreProducto, int nroLote, String paisOrigen, Calendar fechaEnvasado, Calendar fechaCaducidad){
this.nombreProducto=nombreProducto;
this.nroLote=nroLote;
this.paisOrigen=paisOrigen;
this.fechaEnvasado=fechaEnvasado;
this.fechaCaducidad=fechaCaducidad;
}
// metodos setters
/**
* @param nombreProducto Descripcion del producto
*/
public void setNombreProducto(String nombreProducto){
this.nombreProducto=nombreProducto;
}
/**
* @param nroLote Numero de lote del producto
*/
public void setNroLote(int nroLote){
this.nroLote=nroLote;
}
/**
* @param paisOrigen Nombre del pais de origen del producto
*/
public void setPaisOrigen(String paisOrigen){
this.paisOrigen = paisOrigen;
}
// metodos getters
/**
* @return Nombre del producto (String)
*/
public String getNombreProducto(){
return nombreProducto;
}
/**
* @return Número de lote (int)
*/
public int getNroLote(){
return nroLote;
}
/**
* @return Nombre del producto (String)
*/
public String getPaisOrigen(){
return paisOrigen;
}
public void listaProducto(){
FechasProducto fecha = new FechasProducto(fechaEnvasado, fechaCaducidad);
System.out.println("Nombre: "+nombreProducto+" Nro de Lote:"+nroLote+ " Pais de origen:"+paisOrigen+" Fecha de envasado:"+fecha.getStrFechaEnvasado()+ " Fecha de caducidad:"+fecha.getStrFechaCaducidad());
}
}
Clase ProductoFresco
import java.util.Calendar;
/**
* Write a description of class ProductoFresco here.
*
* @author Luis
* @version CU00686B
*/
public class ProductoFresco extends Producto {
public ProductoFresco(){
}
public ProductoFresco(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad) {
super(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad);
}
public void listaProductoFresco(){
super.listaProducto();
}
}
Clase ProductoConservadoEnFrio
import java.util.Calendar;
/**
* Write a description of class ProductoConservadoEnFrio here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class ProductoConservadoEnFrio extends Producto
{
private double temperaturaMantenimiento;
public ProductoConservadoEnFrio(){
temperaturaMantenimiento=0;
}
public ProductoConservadoEnFrio(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento) {
// initialise instance variables
super(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad);
this.temperaturaMantenimiento=temperaturaMantenimiento;
}
/**
* @param codigoOrganismoSupervision El Organismo que controla el producto
*/
/**
* @param temperaturaMantenimiento La temperatura para mantener el producto refrigerado
*/
public void setTemperaturaMantenimiento(double temperaturaMantenimiento){
this.temperaturaMantenimiento = temperaturaMantenimiento;
}
/**
* @return La temperatura para mantener el producto refrigerado (double)
*/
public double getTemperaturaMantenimiento() {
return temperaturaMantenimiento;
}
public void listaProductoConservadoEnFrio(){
super.listaProducto();
System.out.println("Temperatura de mantenimiento: "+temperaturaMantenimiento);}
}
Clase ProductoRefrigerado
import java.util.*;
/**
* Write a description of class ProductoRefrigerado here.
*
* @author Luis
* @version CU00687B
*/
public class ProductoRefrigerado extends ProductoConservadoEnFrio
{
public String organismoSupervision;
public ProductoRefrigerado() {
organismoSupervision="";
}
public ProductoRefrigerado(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, String organismoSupervision) {
// initialise instance variables
super(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento);
this.organismoSupervision=organismoSupervision;
}
/**
* @param codigoOrganismoSupervision El Organismo que controla el producto
*/
public void listaProductoRefrigerado(){
super.listaProductoConservadoEnFrio();
System.out.println("Organismo de Supervisión: "+organismoSupervision);
}
}
Clase ProductoCongelado
import java.util.Calendar;
/**
* Write a description of class ProductoCongelado here.
*
* @author Luis
* @version CU00686B
*/
public class ProductoCongelado extends ProductoConservadoEnFrio {
TipoDeCongelado tipoCongelado;
public ProductoCongelado() {
}
public ProductoCongelado(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento) {
super(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento);
}
public void listaProductoCongelado(){
super.listaProductoConservadoEnFrio();
}
}
Clase ProductoCongeladoPorAire
import java.util.Calendar;
/**
* Write a description of class ProductoCongeladoPorAire here.
*
* @author Luis
* @version CU00687B
*/
public class ProductoCongeladoPorAire extends ProductoCongelado {
float valorN;
float valorO;
float valorCO2;
float valorH2O;
public ProductoCongeladoPorAire() {
valorN=0;
valorO=0;
valorCO2=0;
valorH2O=0;
}
public ProductoCongeladoPorAire(String nomProd, int lote, String xPais, Calendar fechaEnvasado, Calendar fechaCaducidad, double temperaturaMantenimiento, float valorN, float valorO, float valorCO2, float valorH2O) {
super(nomProd, lote, xPais, fechaEnvasado, fechaCaducidad, temperaturaMantenimiento);
this.valorN=valorN;
this.valorO=valorO;
this.valorCO2=valorCO2;
this.valorH2O=valorH2O;
};
public void listaProductoCongeladoPorAire(){
super.listaProductoCongelado();
System.out.println("Composicion del aire: % Nitrogeno "+valorN+", % Oxigeno "+valorO+", % dióxido de carbono "+valorCO2+", % vapor de agua "+valorH2O);
}
}
Continúa el resto del ejercicio como respuesta a éste mensaje