Hola a todos !! Paso a dejar el código y responder las preguntas del ejercicio propuesto en la clase CU00693B del tutorial de programación Java en pdf. Desde ya mcuhas gracias. Saludos,
Luis
EJERCICIO
Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.
Como atributos de la superclase tendremos nombre (String), edad (int) y añosConsolidados (int) declarados como protected.
En la subclase se trabajará con el campo adicional añosEmerito declarado como private.
Un método de la subclase será double obtenerSalarioBase () que obtendrá el salario base como (925 + añosConsolidados * 33.25 + 47.80 * añosEmerito).
Intenta acceder directamente al campo añosConsolidados desde la subclase (como si fuera un campo más de la subclase) para implementar este método. ¿Es posible sin utilizar una invocación a super ni un método get?
Si, es posible al declarar el atributo aniosConsolidados como protected -ver el código abajo-
¿Qué ocurre si el atributo en la superclase lo declaras private?
Si se declara private el atriburo aniosConsolidados y queremos acceder directamente aparecerá un error en la ejecución.
Clase Profesor
public class Profesor { //Ejemplo aprenderaprogramar.com
protected String nombre;
protected int edad;
protected int aniosConsolidados;
public Profesor (String nombre, int edad, int aniosConsolidados) {
this.nombre=nombre; this.edad=edad; this.aniosConsolidados=aniosConsolidados;
}
public void mostrarDatos() {
System.out.println ("Datos Profesor. nombre: "+nombre+", edad: "+edad+", consolidados :"+aniosConsolidados); }
} //Cierre de la clase
Clase ProfesorInterino
public class ProfesorEmerito extends Profesor { //Ejemplo aprenderaprogramar.com
private int aniosEmerito;
private double salarioBase;
public ProfesorEmerito (String nombre, int edad, int aniosConsolidados, int aniosEmerito) {
super(nombre, edad, aniosConsolidados);
this.aniosEmerito=aniosEmerito;
obtenerSalarioBase();
}
public double obtenerSalarioBase(){
salarioBase = (925+aniosConsolidados)*33.25 + (47.80*aniosEmerito);
return salarioBase;
}
public void mostrarDatos() {
super.mostrarDatos();
System.out.println ("Años como profesor emérito :"+aniosEmerito+" con un salario base:"+salarioBase); }
} //Cierre de la clase
Clase ListinProfesores
import java.util.ArrayList; //Ejemplo aprenderaprogramar.com
public class ListinProfesores{
private ArrayList <Profesor> listinProfesores;
//Constructor
public ListinProfesores () {
listinProfesores = new ArrayList <Profesor> (); }
//Métodos
public void addProfesor (Profesor profesor) {
listinProfesores.add(profesor);} // Cierre método addProfesor
public void listar() {
System.out.println ("Se procede a mostrar los datos de los profesores existentes en el listín");
for (Profesor tmp: listinProfesores) { //Uso de for extendido
tmp.mostrarDatos();}
} //Cierre método
} //Cierre de la clase
Clase Test -método main-
public class Test {
public static void main (String [ ] Args) {
ProfesorEmerito emerito1 = new ProfesorEmerito ("Juan Lopez", 53, 25,10);
ProfesorEmerito emerito2 = new ProfesorEmerito("José Luis Perez", 54, 20, 5);
ListinProfesores listin1 = new ListinProfesores ();
listin1.addProfesor(emerito1);
listin1.addProfesor(emerito2);
listin1.listar();} //Cierre del main
} //Cierre de la clase