Autor Tema: X has private access in Y error Java claves public, private y protected CU00693B  (Leído 3315 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola. Dejo el Ejercicio CU00693B del manual pdf Java desde Cero. public, private y protected Java.Tipos de modificadores de acceso. Visibilidad en clases, subclases.

Citar
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?


¿Es posible sin utilizar una invocación a super ni un método get?

Si. Con protected se puede acceder desde todas las clases que estén dentro del mismo paquete.


¿Qué ocurre si el atributo en la superclase lo declaras private?

Da un error cuando vas a compilar "añosConsolidados has private access in Profesor" por que al declarar un campo, variable, etc. como private solo se puede acceder desde dentro de la clase donde se declara.


Clase Profesor

Código: [Seleccionar]
public class Profesor
{
    // instance variables -
    protected String nombre;
    protected int edad;
    protected int añosConsolidados;

    /**
     * Constructores
     */

    public Profesor ()
    {
        // initialise instance variables
        nombre="";
        edad=0;
        añosConsolidados=0;
    }
    //Constructor sobrecargado
    public Profesor (String nombre,int edad,int añosConsolidados)
    {
        // initialise instance variables
        this.nombre=nombre;
        this.edad=edad;
        this.añosConsolidados=añosConsolidados;
    }
    //metodos get 
    public String getNombre() {
        return nombre;
    }

    public int getEdad() {
        return edad;
    }

    public int getAñosConsolidados() {
        return añosConsolidados;
    }
    //metodos set
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
public void setEdad(int edad) {
        this.edad = edad;
    }
    public void setAñosConsolidados(int añosConsolidados) {
        this.añosConsolidados =añosConsolidados;
    }
    public double obtenerSalarioBase(){
        double salarioBase;
        salarioBase=925+añosConsolidados*33.25;
        return salarioBase;
    }

}

Clase ProfesorEmerito
Código: [Seleccionar]
public class ProfesorEmerito extends Profesor
{
    // instance variables -
    private int añosEmeritos;
    /**
     * Constructores
     */

   
    //Constructor sobrecargado
    public ProfesorEmerito(String nombre,int edad,int añosConsolidados,int añosEmeritos)
    {
        super(nombre,edad,añosConsolidados);
        this.añosEmeritos=añosEmeritos;
    }

    public int getAñosEmeritos() {
        return añosEmeritos;
    }
    //metodos set
    public void setAñosEmeritos(int añosEmeritos) {
        this. añosEmeritos = añosEmeritos;
    }

    public double obtenerSalarioBase(){
        double salarioBase=( salarioBase=925+añosConsolidados*33.25+(47.80 * añosEmeritos));
        return salarioBase;
       
    }
}

Clase TestProtected
Código: [Seleccionar]
public class TestProtected
{
    public static void main(String[] args){
        ProfesorEmerito profeEmerito= new ProfesorEmerito("Jose Marquez de Vicente",45,15,10);
        double salarioBaseCalculado=profeEmerito.obtenerSalarioBase();
        System.out.print("El salario Base Calculado del Profesor es de :"+salarioBaseCalculado+" Euros");
         
       
    }
}

Gracias. ;)
« Última modificación: 14 de Agosto 2019, 18:53 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, para quien revise este ejercicio, las respuestas son correctas. En el hilo https://aprenderaprogramar.com/foros/index.php?topic=2449.0 puede verse algún comentario adicional.
Salu2

 

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