Buenas. Hago entrega del ejericicio CU00693B del curso Java desde cero.
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? ¿Qué ocurre si el atributo en la superclase lo declaras private?
Código de la clase "Profesor":
public class Profesor{
protected String nombre;
protected int edad;
protected int anyosConsolidados;
public Profesor(String nombre, int edad, int anyosConsolidados){
this.nombre = nombre;
this.edad = edad;
this.anyosConsolidados = anyosConsolidados;
}
public Profesor(){
nombre = "";
edad = 0;
anyosConsolidados = 0;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public void setEdad(int edad){
this.edad = edad;
}
public void setAnyosConsolidados(int anyosConsolidados){
this.anyosConsolidados = anyosConsolidados;
}
public String getNombre(){return nombre;}
public int getEdad(){return edad;}
public int getAnyosConsolidados(){return anyosConsolidados;}
public double obtenerSalarioBase(){
double salarioBase;
salarioBase = 725+(anyosConsolidados*33.25);
return salarioBase;
}
public void mostrarInfoProfesor(){
System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" y años consolidados y no tiene años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
}
}
Código de la clase "ProfesorEmerito":
public class ProfesorEmerito extends Profesor{
private int anyosEmerito;
public ProfesorEmerito(String nombre, int edad, int anyosConsolidados, int anyosEmerito){
super(nombre, edad, anyosConsolidados);
this.anyosEmerito = anyosEmerito;
}
public ProfesorEmerito(){
super();
anyosEmerito = 0;
}
public void setAnyosEmerito(int anyosEmerito){
this.anyosEmerito = anyosEmerito;
}
public int getAnyosEmerito(){return anyosEmerito;}
public double obtenerSalarioBase(){
double salarioBase;
salarioBase = 925+(anyosConsolidados*33.25)+(47.80*anyosEmerito);
return salarioBase;
}
public void mostrarInfoProfesor(){
System.out.println("El profesor: "+getNombre()+" de: "+getEdad()+" años tiene: "+getAnyosConsolidados()+" años consolidados y "+getAnyosEmerito()+" años de emérito.\nPor lo tanto le corresponde un salario de: "+obtenerSalarioBase()+" euros.");
}
}
Código de la clase "TestDeclaracionProtected":
public class TestDeclaracionProtected{
public static void main(String []Args){
ProfesorEmerito profesorEmerito = new ProfesorEmerito("Juan",65,45,5);
profesorEmerito.mostrarInfoProfesor();
}
}
Si en la superclase "Profesor" los campos a los que queremos acceder desde la subclase están declaradas como "protected" podríamos hacerlo como si de un campo propio de la clase "ProfesorEmerito" se tratase.
En caso contrario, si estuvieran declaradas como "private" no podríamos acceder desde las subclases.
Gracias.