Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: RaGa en 27 de Abril 2015, 21:02
-
Mi versión del Ejercicio propuesto en la Entrega Nº92. Ejercicio CU00692B.
Clase Profesor
/**
* 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
/**
* 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
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
-
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
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
/**
* 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!
-
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!
-
Hola! Explicación totalmente clara, con eso el ejercicio queda más que aclarado por lo que no veo necesidad de hacerle modificaciones.
Saludos!
-
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!