Hola
Expongo la resolución al ejercicio de polimorfismo, ejercicio que amplia el ejercicio de la entrega CU00687B sobre herencia del curso elemental de programación Java con IDE BlueJ
Clase EnvioDeProductos que contiene la lista de productos
package aplicacion;
import java.util.List;
import java.util.ArrayList;
/**
* Clase EnvioDeProductos que contiene la lista de productos
* @author David
*
*/
public class EnvioDeProductos {
private List<Producto> listaProductos;
public EnvioDeProductos(){
listaProductos = new ArrayList<Producto>();
}
//Getters and Setters
public List<Producto> getListaProductos() {
return listaProductos;
}
public void setListaProductos(List<Producto> listaProductos) {
this.listaProductos = listaProductos;
}
//Método encargado de añadir los productos a la lista para su posterior envio
public ArrayList<Producto> crearEnvio(Producto producto){
listaProductos.add(producto);
return (ArrayList<Producto>) listaProductos;
}
}
Clase TestHerencia4
package test;
import aplicacion.*;
import java.util.Iterator;
public class TestHerencia4 {
public static void main(String[] args){
//Instancio un objeto de la clase EnvioDeProducto
EnvioDeProductos envioProductos = new EnvioDeProductos();
//Creo una lista con todos los productos para su posterior envio
envioProductos.crearEnvio(new ProductoFresco("23/12/2017", 200, "12/03/2017", "EEUU"));
envioProductos.crearEnvio(new ProductoFresco("12/10/2017", 150, "24/06/2017", "Brasil"));
envioProductos.crearEnvio(new ProductoRefrigerado("20/11/2018", 456, "22/02/2017", "España", 22, 32));
envioProductos.crearEnvio(new ProductoRefrigerado("14/09/2019", 303, "18/09/2018", "Alemania", 14, 50));
envioProductos.crearEnvio(new ProductoRefrigerado("05/07/2020", 105, "16/06/2018", "Francia", 48, 85));
envioProductos.crearEnvio(new ProductoCongelado("11/09/2022", 184, "04/05/2017", "China", -30));
envioProductos.crearEnvio(new ProductoCongelado("15/05/2025", 208, "04/05/2017", "Mexico", -28));
envioProductos.crearEnvio(new ProductoCongelado("20/04/2024", 302, "04/05/2017", "Ecuador", -29));
envioProductos.crearEnvio(new ProductoCongelado("30/03/2023", 650, "04/05/2017", "Tailandia", -27));
envioProductos.crearEnvio(new ProductoCongelado("26/01/2021", 985, "04/05/2017", "India", -26));
envioProductos.crearEnvio(new CongeladoAgua("13/06/2020", 656, "31/04/2017", "Portugal", -25, 4));
envioProductos.crearEnvio(new CongeladoAgua("24/08/2024", 987, "06/09/2017", "Italia", -26, 8));
envioProductos.crearEnvio(new CongeladoAire("25/08/2022", 854, "14/11/2017", "Puerto Rico", -30, "4"));
envioProductos.crearEnvio(new CongeladoAire("15/12/2023", 854, "10/08/2017", "Egipto", -28, "3"));
envioProductos.crearEnvio(new CongeladoNitrogeno("25/04/2026", 741, "05/04/2017", "Guatemala", -35, "info", 50));
//Muestro por pantalla la información del número de productos que componen el envio
System.out.println("El número de productos que componen el envio es: "+envioProductos.getListaProductos().size());
//Recorro la lista para ir mostrando la información (valor de los atributos) de cada uno de ellos.
Iterator<Producto> it = envioProductos.getListaProductos().iterator();
Producto elemento;
while (it.hasNext()) {
elemento = it.next();
System.out.println("Este es la información de cada producto: "+elemento.toString());
}
}
}
Superclase Producto
package aplicacion;
/**
* Superclase Producto
* @author David
*
*/
public class Producto {
private String fechaCaducidad;
private int numeroLote;
public Producto(){
}
//Constructor sobrecargado
public Producto(String fechaCaducidad,int numeroLote){
this.fechaCaducidad = fechaCaducidad;
this.numeroLote = numeroLote;
}
//Getters and Setters
public String getFechaCaducidad(){
return fechaCaducidad;
}
public void setFechaCaducidad(String valorFechaCaducidad){
fechaCaducidad = valorFechaCaducidad;
}
public int getNumeroLote(){
return numeroLote;
}
public void setNumeroLote(int valorNumeroLote){
numeroLote = valorNumeroLote;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de caducidad: "+fechaCaducidad+" //Número de lote: "+numeroLote;
}
}
Subclase ProductoFresco que implementa la superclase Producto
package aplicacion;
/**
* Subclase ProductoFresco que extiende de Producto
* @author David
*
*/
public class ProductoFresco extends Producto{
private String fechaEnvasado;
private String paisOrigen;
//Constructor sobrecargado
public ProductoFresco(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen){
super(fechaCaducidad,numeroLote);
this.fechaEnvasado = fechaEnvasado;
this.paisOrigen = paisOrigen;
}
//Getters and Setters
public String getFechaEnvasado() {
return fechaEnvasado;
}
public void setFechaEnvasado(String fechaEnvasado) {
this.fechaEnvasado = fechaEnvasado;
}
public String getPaisOrigen() {
return paisOrigen;
}
public void setPaisOrigen(String paisOrigen) {
this.paisOrigen = paisOrigen;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Fecha de envasado: "+fechaEnvasado+" País origen: "+paisOrigen;
}
}
Subclase ProductoRefrigerado que implementa la superclase Producto
package aplicacion;
/**
* Subclase ProductoRefrigerado que extiende de la clase ProductoFresco
* @author David
*
*/
public class ProductoRefrigerado extends ProductoFresco {
private int codigoOrganismo;
private double temperaturaMantenimiento;
//Constructor sobrecargado
public ProductoRefrigerado(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen,int temperaturaMantenimiento,int codigoOrganismo){
super(fechaCaducidad, numeroLote,fechaEnvasado,paisOrigen);
this.codigoOrganismo = codigoOrganismo;
this.temperaturaMantenimiento = temperaturaMantenimiento;
}
//Getters and Setters
public int getCodigoOrganismo() {
return codigoOrganismo;
}
public void setCodigoOrganismo(int codigoOrganismo) {
this.codigoOrganismo = codigoOrganismo;
}
public double getTemperaturaMantenimiento() {
return temperaturaMantenimiento;
}
public void setTemperaturaMantenimiento(double temperaturaMantenimiento) {
this.temperaturaMantenimiento = temperaturaMantenimiento;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de envasado: "+getFechaEnvasado()+" //Pais de origen: "+getPaisOrigen()+" //Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Temperatura de mantenimiento: "+temperaturaMantenimiento+" //Código organimo: "+codigoOrganismo;
}
}
Superclase ProductoCongelado que a su vez extiende de Producto
package aplicacion;
/**
* Subclase ProductoCongelado que extiende de ProductoFresco
* @author David
*
*/
public class ProductoCongelado extends ProductoFresco {
private int temperaturaMantenimiento;
//Constructor sobrecargado
public ProductoCongelado(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen,int temperaturaMantenimiento){
super(fechaCaducidad,numeroLote,fechaEnvasado,paisOrigen);
this.temperaturaMantenimiento = temperaturaMantenimiento;
}
//Getters and Setters
public int getTemperaturaMantenimiento() {
return temperaturaMantenimiento;
}
public void setTemperaturaMantenimiento(int temperaturaMantenimiento) {
this.temperaturaMantenimiento = temperaturaMantenimiento;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de envasado: "+getFechaEnvasado()+" //Pais de origen: "+getPaisOrigen()+" //Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Temperatura de mantenimiento: "+temperaturaMantenimiento;
}
}
Subclase CongeladoAire que extiende de ProductoCongelado
package aplicacion;
/**
* Subclase CongeladoAire que extiende de ProductoCongelado
* @author David
*
*/
public class CongeladoAire extends ProductoCongelado{
private String composicionAire;
//Constructor sobrecargado
public CongeladoAire(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen,int temperaturaMantenimiento,String composicionAire){
super(fechaCaducidad,numeroLote,fechaEnvasado,paisOrigen,temperaturaMantenimiento);
this.composicionAire = composicionAire;
}
//Getters and Setters
public String getComposicionAire() {
return composicionAire;
}
public void setComposicionAire(String composicionAire) {
this.composicionAire = composicionAire;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Fecha envasado: "+getFechaEnvasado()+" //País origen: "+getPaisOrigen()+" //Temperatura mantenimiento: "+getTemperaturaMantenimiento()+" //Composición del aire: "+composicionAire;
}
}
Subclase CongeladoAgua que extiende de ProductoCongelado
package aplicacion;
/**
* Subclase CongeladoAgua que extiende de ProductoCongelado
* @author David
*
*/
public class CongeladoAgua extends ProductoCongelado{
private int salinidadAgua;
//Constructor sobrecargado
public CongeladoAgua(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen,int temperaturaMantenimiento,int salinidadAgua){
super(fechaCaducidad,numeroLote,fechaEnvasado,paisOrigen,temperaturaMantenimiento);
this.salinidadAgua = salinidadAgua;
}
//Getters and Setters
public int getSalinidadAgua() {
return salinidadAgua;
}
public void setSalinidadAgua(int salinidadAgua) {
this.salinidadAgua = salinidadAgua;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Fecha envasado: "+getFechaEnvasado()+" //País origen: "+getPaisOrigen()+" //Temperatura mantenimiento: "+getTemperaturaMantenimiento()+" //Salinidad agua: "+salinidadAgua;
}
}
Subclase CongeladoNitrogeno que extiende de ProductoCongelado
package aplicacion;
/**
* Subclase CongeladoNitrogeno que extiende de ProductoCongelado
* @author David
*
*/
public class CongeladoNitrogeno extends ProductoCongelado{
private String informacionMetodoCongelacion;
private int tiempoEsposicion;
//Constructor sobrecargado
public CongeladoNitrogeno(String fechaCaducidad, int numeroLote, String fechaEnvasado, String paisOrigen,int temperaturaMantenimiento,String informacionMetodoCongelacion,int tiempoEsposicion){
super(fechaCaducidad,numeroLote,fechaEnvasado,paisOrigen,temperaturaMantenimiento);
this.informacionMetodoCongelacion = informacionMetodoCongelacion;
this.tiempoEsposicion = tiempoEsposicion;
}
//Getters and Setters
public String getInformacionMetodoCongelacion() {
return informacionMetodoCongelacion;
}
public void setInformacionMetodoCongelacion(String informacionMetodoCongelacion) {
this.informacionMetodoCongelacion = informacionMetodoCongelacion;
}
public int getTiempoEsposicion() {
return tiempoEsposicion;
}
public void setTiempoEsposicion(int tiempoEsposicion) {
this.tiempoEsposicion = tiempoEsposicion;
}
//Método toString sobrecargado
public String toString(){
return "Fecha de caducidad: "+getFechaCaducidad()+" //Número de lote: "+getNumeroLote()+" //Fecha envasado: "+getFechaEnvasado()+" //País origen: "+getPaisOrigen()+" //Temperatura mantenimiento: "+getTemperaturaMantenimiento()+" //Información sobre el método de congelación: "+informacionMetodoCongelacion+" //Tiempo de exposicion: "+tiempoEsposicion;
}
}
Ejecución del programa
El número de productos que componen el envio es: 15
Este es la información de cada producto: Fecha de caducidad: 23/12/2017 //Número de lote: 200 //Fecha de envasado: 12/03/2017 País origen: EEUU
Este es la información de cada producto: Fecha de caducidad: 12/10/2017 //Número de lote: 150 //Fecha de envasado: 24/06/2017 País origen: Brasil
Este es la información de cada producto: Fecha de envasado: 22/02/2017 //Pais de origen: España //Fecha de caducidad: 20/11/2018 //Número de lote: 456 //Temperatura de mantenimiento: 22.0 //Código organimo: 32
Este es la información de cada producto: Fecha de envasado: 18/09/2018 //Pais de origen: Alemania //Fecha de caducidad: 14/09/2019 //Número de lote: 303 //Temperatura de mantenimiento: 14.0 //Código organimo: 50
Este es la información de cada producto: Fecha de envasado: 16/06/2018 //Pais de origen: Francia //Fecha de caducidad: 05/07/2020 //Número de lote: 105 //Temperatura de mantenimiento: 48.0 //Código organimo: 85
Este es la información de cada producto: Fecha de envasado: 04/05/2017 //Pais de origen: China //Fecha de caducidad: 11/09/2022 //Número de lote: 184 //Temperatura de mantenimiento: -30
Este es la información de cada producto: Fecha de envasado: 04/05/2017 //Pais de origen: Mexico //Fecha de caducidad: 15/05/2025 //Número de lote: 208 //Temperatura de mantenimiento: -28
Este es la información de cada producto: Fecha de envasado: 04/05/2017 //Pais de origen: Ecuador //Fecha de caducidad: 20/04/2024 //Número de lote: 302 //Temperatura de mantenimiento: -29
Este es la información de cada producto: Fecha de envasado: 04/05/2017 //Pais de origen: Tailandia //Fecha de caducidad: 30/03/2023 //Número de lote: 650 //Temperatura de mantenimiento: -27
Este es la información de cada producto: Fecha de envasado: 04/05/2017 //Pais de origen: India //Fecha de caducidad: 26/01/2021 //Número de lote: 985 //Temperatura de mantenimiento: -26
Este es la información de cada producto: Fecha de caducidad: 13/06/2020 //Número de lote: 656 //Fecha envasado: 31/04/2017 //País origen: Portugal //Temperatura mantenimiento: -25 //Salinidad agua: 4
Este es la información de cada producto: Fecha de caducidad: 24/08/2024 //Número de lote: 987 //Fecha envasado: 06/09/2017 //País origen: Italia //Temperatura mantenimiento: -26 //Salinidad agua: 8
Este es la información de cada producto: Fecha de caducidad: 25/08/2022 //Número de lote: 854 //Fecha envasado: 14/11/2017 //País origen: Puerto Rico //Temperatura mantenimiento: -30 //Composición del aire: 4
Este es la información de cada producto: Fecha de caducidad: 15/12/2023 //Número de lote: 854 //Fecha envasado: 10/08/2017 //País origen: Egipto //Temperatura mantenimiento: -28 //Composición del aire: 3
Este es la información de cada producto: Fecha de caducidad: 25/04/2026 //Número de lote: 741 //Fecha envasado: 05/04/2017 //País origen: Guatemala //Temperatura mantenimiento: -35 //Información sobre el método de congelación: info //Tiempo de exposicion: 50
Saludos