Autor Tema: Java ejercicio reutilización código, herencia, super, sobreescritura CU00692B  (Leído 4301 veces)

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Mi versión del Ejercicio propuesto en la Entrega Nº92. Ejercicio CU00692B.

Clase Profesor
Código: [Seleccionar]
/**
 * Clase Profesor
 *
 * @author (RaGa)
 * @version (20150427)
 */
public class Profesor
{
    // Declaración de campos de instancia.
    private String nombre;
    private int edad;
    private int añosConsolidados;

    /**
     * Constructor 1 para objetos de clase Profesor
     */
    public Profesor(String nombre, int edad, int añosConsolidados){
        this.nombre=nombre;
        this.edad=edad;
        this.añosConsolidados=añosConsolidados;
    }
   
    /**
     * Constructor 2 para objetos de clase Profesor
     */
    public Profesor(){
        nombre="";
        edad=0;
        añosConsolidados=0;
    }

    /**
     * métodos setters
     */
   
    public void setAñosConsolidados(int añosConsolidados){
        this.añosConsolidados=añosConsolidados;
    }
   
    public void setNombre(String nombre){
        this.nombre=nombre;
    }
   
    public void setEdad(int edad){
        this.edad=edad;
    }
   
    /**
     * métodos getters
     */
   
    public int getAñosConsolidados(){
        return añosConsolidados;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public int getEdad(){
        return edad;
    }
   
    /**
     * métodos varios
     */
   
    public String mostrarDatos(){
        return ("\nNombre: "+nombre+", Edad: "+edad+", Años Consolidados: "+añosConsolidados+", ");
    }
   
    public double obtenerSalarioBase(){
        return (725+(añosConsolidados*33.25));
    }
   
}// fin de la clase

Clase ProfesorEmerito
Código: [Seleccionar]
/**
 * Clase ProfesorEmerito
 *
 * @author (RaGa)
 * @version (20150427)
 */
public class ProfesorEmerito extends Profesor
{
    // Declaración de campos de instancia.
    private int añosEmerito;

    /**
     * Constructor 1 para objetos de clase ProfesorEmerito
     */
    public ProfesorEmerito(String nombre, int edad, int añosConsolidados, int añosEmerito){
        super(nombre,edad,añosConsolidados);
        this.añosEmerito=añosEmerito;
    }
   
    /**
     * Constructor 2 para objetos de clase ProfesorEmerito
     */
    public ProfesorEmerito(int añosEmerito){
        super();
        añosEmerito=añosEmerito;
    }

    /**
     * métodos setters
     */
   
    public void setAñosEmerito(int añosEmerito){
        this.añosEmerito=añosEmerito;
    }
   
    /**
     * métodos getters
     */
   
    public int getAñosEmerito(){
        return añosEmerito;
    }

   
    /**
     * métodos varios
     */
   
    public String mostrarDatos(){
        return (super.mostrarDatos()+" Años Emérito: "+añosEmerito+", ");
    }
   
    public double obtenerSalarioBase(){
        return (super.obtenerSalarioBase()+(47.80*añosEmerito));
    }
   
}// fin de la clase

Clase TestHerencia6
Código: [Seleccionar]
import java.util.*;

/**
 * Clase TestHerencia6
 *
 * @author (RaGa)
 * @version (20150427)
 */
public class TestHerencia6
{
    // Declaracion de variables de instancia.
   

    /**
     * Constructor de clase
     */
    public TestHerencia6(){ //vacío
    }

    /**
     * método main
     */
    public static void main(){
        ArrayList<Profesor> listaProfesoresAcademia;
        listaProfesoresAcademia=new ArrayList<Profesor>();
       
        // Carga de datos de Profesores
        Profesor profe1 = new Profesor("Danilo Salazar Quintana",28,2);
        Profesor profe2 = new ProfesorEmerito("Cándido Tolosa Martínez",63,28,3);
        ProfesorEmerito profe3 = new ProfesorEmerito("María Rosa Díaz Díaz",60,27,2);
       
        // Carga de ListaProfesoresAcademia
        listaProfesoresAcademia.add(profe1);
        listaProfesoresAcademia.add(profe2);
        listaProfesoresAcademia.add(profe3);
       
        // Muestra de ListaProfesoresAcademia
        System.out.println("\fLista de Profesores de la Academia");
        for (Profesor tmp:listaProfesoresAcademia){
            System.out.println(tmp.mostrarDatos());
            System.out.println("Salario Base= "+tmp.obtenerSalarioBase());
        }
       
    }// fin de main
   
}// fin de clase
« Última modificación: 28 de Abril 2015, 17:08 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Hola RaGA!

Como se ha hablado en otros hilos recomendable no usar eñes en el código, private int añosConsolidados; - > private int annosConsolidados;

Luego

Código: [Seleccionar]
        Profesor profe1 = new Profesor("Danilo Salazar Quintana",28,2);
        Profesor profe2 = new ProfesorEmerito("Cándido Tolosa Martínez",63,28,3);
        ProfesorEmerito profe3 = new ProfesorEmerito("María Rosa Díaz Díaz",60,27,2);


Pero para hacerlo polimórfico completamente también escribiríamos Profesor profe3 = new ProfesorEmerito("María Rosa Díaz Díaz",60,27,2);

Tienes un error en este constructor

Código: [Seleccionar]
    /**
     * Constructor 2 para objetos de clase ProfesorEmerito
     */
    public ProfesorEmerito(int añosEmerito){
        super();
        añosEmerito=añosEmerito;
    }


Te ha faltado el this - > this.añosEmerito=añosEmerito;


Saludos!

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Gracias Javi por tus correcciones!

Verás, cuando declaré al objeto porfe3 como tipo estático ProfesorEmerito lo hice ex profeso para mostar lo siguiente:

Un objeto tipo ProfesorEmerito puede ser declarado como tipo estático ProfesorEmerito (como ya sabíamos desde siempre), pero a su vez también puede ser declarado como tipo estático Profesor, por polimorfismo (es el caso del objeto profe2).

De esta manera, al recorrer la lista ArrayList que los contiene, mostrar cómo ambos objetos instanciados como tipo ProfesorEmerito (profe2 y profe 3), por más que uno este declarado como tipo estático Profesor y el otro como tipo estático ProfesorEmerito, harán uso de los mismos métodos (los  correspondientes a la clase ProfesorEmerito), por el hecho de que en tiempo de ejecución la máquina virtual considerará el tipo dinámico del objeto y no el estático.
Quería poner de manifiesto este comportamiento en el ejemplo.
Espero haber sido claro en la explicación. ¿Te parece correcto dejar esto en el ejercicio, o lo modifico?

En cuanto al olvido de "this",y la alternativa de la doble 'n' en vez de la 'ñ', totalmente de acuerdo!

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Hola! Explicación totalmente clara, con eso el ejercicio queda más que aclarado por lo que no veo necesidad de hacerle modificaciones.

Saludos!

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Gracias Javi por el tiempo dedicado en la corrección del ejercicio!

Me alegro de haber sido claro en la explicación, y subo nuevamente el ejercicio como archivo adjunto (para descargar pulsar en el icono de archivo estando logeado en el foro). He modificando el código en base a las dos correcciones que me has señalado oportunamente.

Muchas gracias!
« Última modificación: 29 de Abril 2015, 09:28 por Alex Rodríguez »

 

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