Hola
Expongo la resolución al ejercicio sobre los modificadores de acceso, CU00693B del tutorial de desarrollo de aplicaciones con Java con IDE BlueJ
Clase de test TestModificadoresAcceso
package test;
import aplicacion.*;
public class TestModificadoresAcceso {
public static void main(String[] args){
ProfesorEmerito pe1 = new ProfesorEmerito("David", 30, 10, 3);
double salarioBase = pe1.obtenerSalarioBase();
System.out.println("Este es el salario base: "+salarioBase);
}
}
Superclase Profesor
package aplicacion;
public class Profesor {
protected String nombre;
protected int edad;
protected int anosConsolidados;
//Constructor
public Profesor(){
nombre = "";
edad = 0;
anosConsolidados = 0;
}
//Constructor sobrecargado
public Profesor(String nombre, int edad, int anosConsolidados){
this.nombre = nombre;
this.edad = edad;
this.anosConsolidados = anosConsolidados;
}
//Getters and Setters
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public int getAnosConsolidados() {
return anosConsolidados;
}
public void setAnosConsolidados(int anosConsolidados) {
this.anosConsolidados = anosConsolidados;
}
}
Subclase ProfesorEmerito que extiende de Profesor
package aplicacion;
public class ProfesorEmerito extends Profesor{
private int anosEmerito;
//Constructor
public ProfesorEmerito(){
anosEmerito = 0;
}
//Constructor sobrecargado
public ProfesorEmerito(String nombre, int edad, int anosConsolidados,int anosEmerito){
super(nombre,edad,anosConsolidados);
this.anosEmerito = anosEmerito;
}
//Getters and Setters
public int getAnosEmerito() {
return anosEmerito;
}
public void setAnosEmerito(int anosEmerito) {
this.anosEmerito = anosEmerito;
}
/**
* Método que obtiene el salario base de un profesor emerito
*/
public double obtenerSalarioBase(){
//double salarioBaseProfesor = super.obtenerSalarioBase();
double resultado = 925 + anosConsolidados * 33.25 + 47.80 * anosEmerito;
return resultado;
}
}
Ejecución de la aplicación
Este es el salario base: 1400.9
Preguntas
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?
Sí es posible acceder a la propiedad añosConsolidados desde la subclase ya que su modificador de acceso es protected, si el atributo lo declarara como private tendría que utilizar el método get para acceder al valor de la propiedad.
Saludos