Autor Tema: Curso JAVA ejercicio CU00686B . Uso de palabras clave extends y super.  (Leído 3188 veces)

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Esta podría ser una solución al ejercicio propuesto CU00686B.


Código: [Seleccionar]
public class Producto
{
    private String lote;
    private String fechaCaducidad;

    public Producto(){
        lote="";
        fechaCaducidad="";
    }

    public Producto(String lote,String fechaCaducidad){
        this.lote=lote;
        this.fechaCaducidad=fechaCaducidad;
    }

    public void setLote(String lote){
        this.lote=lote;
    }

    public void setFechaCaducidad(String fechaCaducidad){
        this.fechaCaducidad=fechaCaducidad;
    }

    public String getLote(){
        return lote;
    }

    public String getFechaCaducidad(){
        return fechaCaducidad;
    }

    public void mostrarProducto(){
        System.out.println("Lote : "+lote);
        System.out.println("Fecha de caducidad : "+fechaCaducidad);
    }
   
    public void mostrarInformacion(){
        //Sobreescrito en cada una de las subclases
    }
   
}


Código: [Seleccionar]
public class ProductoFresco extends Producto
{
    private String fechaEnvasado;
    private String paisOrigen;

    public ProductoFresco(){
        super();
        fechaEnvasado="";
        paisOrigen="";
    }

    public ProductoFresco(String numeroLote, String fechaCaducidad, String fechaEnvasado, String paisOrigen){
        super(numeroLote,fechaCaducidad);
        this.fechaEnvasado=fechaEnvasado;
        this.paisOrigen=paisOrigen;
    }

    public void setFechaEnvasado(String fechaEnvasado){
        this.fechaEnvasado=fechaEnvasado;
    }

    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen=paisOrigen;
    }

    public String getFechaEnvasdo(){
        return fechaEnvasado;
    }

    public String getPaisOrigen(){
        return paisOrigen;
    }

    public void mostrarInformacion(){
         System.out.println("--- Producto Fresco ---");
        mostrarProducto();
        System.out.println("Fecha de envasado : "+fechaEnvasado);
        System.out.println("Pais de origen :"+paisOrigen);
    }
}



Código: [Seleccionar]
public class ProductoRefrigerado extends Producto
{
    private String codigoOrgSupAlim;

    public ProductoRefrigerado(){
        super();
        codigoOrgSupAlim="";
    }

    public ProductoRefrigerado(String lote, String fechaCaducidad, String codigoOrgSupAlim){
        super(lote,fechaCaducidad);
        this.codigoOrgSupAlim=codigoOrgSupAlim;
    }

    public void setCodigoOrgSupAlim(String codigoOrgSupAlim){
        this.codigoOrgSupAlim=codigoOrgSupAlim;
    }

    public String getCodigoOrgSupAlim(){
        return codigoOrgSupAlim;
    }

    public void mostrarInformacion(){
        System.out.println("--- Producto Refrigerado ---");
        mostrarProducto();
        System.out.println("Codigo del Organismo de Supervisión Alimentaria : "+codigoOrgSupAlim);

    }
}


Código: [Seleccionar]
public class ProductoCongelado extends Producto
{
    private double temperaturaCongelacion;

    public ProductoCongelado()
    {
        super();
        temperaturaCongelacion=0;
    }

    public ProductoCongelado(String lote,String fechaCaducidad,double temperaturaCongelacion){
        super(lote,fechaCaducidad);
        this.temperaturaCongelacion=temperaturaCongelacion;
    }

    public void setTemperaturaCongelacion(double temperaturaCongelacion){
        this.temperaturaCongelacion =temperaturaCongelacion;
    }

    public double getTemperaturaCongelacion(){
        return temperaturaCongelacion;
    }

    public void mostrarInformacion(){
        System.out.println("--- Producto Congelado ---");
        mostrarProducto();
        System.out.println("Temperatura de congelación : "+temperaturaCongelacion+"ºC");
    }
}


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

public class TestHerencia2
{
    public static void main(String Arg[]){
        ArrayList<Producto> listaProductos= new ArrayList<Producto>();

        listaProductos.add(new ProductoFresco("01","01/01/2021","01/01/2001","Argentina"));
        listaProductos.add(new ProductoRefrigerado("02","02/02/2022","COD-002"));
        listaProductos.add(new ProductoCongelado("03","03/03/2023",-3.50));

        System.out.println("Lista de Productos\n");
        Iterator<Producto> otroProducto=listaProductos.iterator();
        while(otroProducto.hasNext()){
            otroProducto.next().mostrarInformacion();
        }
        System.out.println("\nFin lista");
    }
}

Un saludo
« Última modificación: 16 de Julio 2015, 14:48 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Curso JAVA ejercicio CU00686B . Uso de palabras clave extends y super.
« Respuesta #1 en: 16 de Julio 2015, 14:48 »
Hola!

El ejercicio se ve bien trabajado, mi enhorabuena.

Quiero hacerte algunas puntualizaciones que espero te sirvan para siempre ir mejorando:

Aunque la idea de usar los métodos mostrarProducto() y mostrarInformacion() no es del todo mala, hay una forma mejor para resolver lo que has tratado de plantear (mostrar toda la información sin repetir código).

En la clase Producto aparece:

Código: [Seleccionar]
    public void mostrarProducto(){
        System.out.println("Lote : "+lote);
        System.out.println("Fecha de caducidad : "+fechaCaducidad);
    }
   
    public void mostrarInformacion(){
        //Sobreescrito en cada una de las subclases
    }

En la clase ProductoRefrigerado aparece:

Código: [Seleccionar]
    public void mostrarInformacion(){
        System.out.println("--- Producto Refrigerado ---");
        mostrarProducto();
        System.out.println("Codigo del Organismo de Supervisión Alimentaria : "+codigoOrgSupAlim);

    }

Estás llamando al método mostrarProducto() de la superclase para evitar repetir código (buena idea). Sin embargo, tienes dos métodos con distinto nombre que vienen haciendo lo mismo (mala idea, creas una duplicidad que no es buena desde el punto de vista del diseño del código).

Podríamos resolverlo como se hace aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=2306

Otra solución (preferible) sería usar una invocación a super para recuperar el código del método de la superclase y añadirlo a la subclase. Esto se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=2440 y sería bueno que intentaras resolver el ejercicio de esta manera, pues es un buen ejemplo para entender cómo trabaja la herencia y cómo permite la reutilización de código.

Finalmente tendríamos la solución de usar el método toString(), esto se explica más adelante en el curso, no te preocupes por ella de momento.

Saludos

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Re:Curso JAVA ejercicio CU00686B . Uso de palabras clave extends y super.
« Respuesta #2 en: 16 de Julio 2015, 20:29 »
Muchas gracias Mario.
Tomo nota de tu consejo y lo pondré en practica en el siguiente ejercicio.
Un saludo.

 

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".