Autor Tema: Java error excepción x has private access in y modificadores de acceso CU00693B  (Leído 3540 veces)

Enzo

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 82
    • Ver Perfil
Hola,

Aquí dejo mi ejercicio del tema "CU00693B tipos modificador acceso java public private protected visibilidad" para su corrección:

Citar
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.
Código: [Seleccionar]
/**
 * EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y ACCESO.<br>
 * Esta Clase define una Superclase de la que "beberan" otras clases.<br>
 * Clase 1 del Ejercicio del Tema "CU00693B tipos modificador acceso java public private protected visibilidad".
 * @author Lorenzo Fernández Asensio
 * @version 20151202.01
 */
public class Profesor_CU00693B {

    // Inicialización de Atributos
    protected String nombre;
    protected int edad,
                agnosConsolidados;
    /* La sigiente inicialización daría error al compilar la subclase "Profesor Emerito"
     * si se intenta usar este atributo sin utilizar una invocación a super ni un método get*/
    // private agnosConsolidados;

    /**
     * Constructor 1 del Producto. Atribututos sin asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00693B () {
        nombre = "";
        edad = 0;
        agnosConsolidados = 0;
    } // Cierre del constructor 1

    /**
     * Constructor 2 del Producto. Atribututos con asignación de Valores
     * @param nombre El parámetro nombre define el Nombre del Profesor
     * @param edad El parámetro edad define la edad del Profesor
     * @param agnosConsolidados El parámetro agnosConsolidados define los años consolidados que lleva el Profesor
     */
    public Profesor_CU00693B (String nombre, int edad, int agnosConsolidados) {       
        this.nombre = nombre;
        this.edad = edad;
        this.agnosConsolidados = agnosConsolidados;
    } // Cierre del constructor 2

    /**
     * Método para establecer el Nombre del Profesor
     * @param valorNombre El parámetro valorNombre define el valor que contendrá el Nombre
     */
    public void setNombre(String valorNombre) {
        nombre = valorNombre;
    } // Cierre del método para establecer el Nombre del Profesor
   
    /**
     * Método para establecer la Edad del Profesor
     * @param valorEdad El parámetro valorEdad define el valor que contendrá la Edad
     */
    public void setEdad(int valorEdad) {
        edad = valorEdad;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para establecer los Años Consolidados del Profesor
     * @param valorAgnosConsolidados El parámetro valorAgnosConsolidados define el valor que contendrá los Años Consolidados
     */
    public void setAgnosConsolidados(int valorAgnosConsolidados) {
        agnosConsolidados = valorAgnosConsolidados;
    } // Cierre del método para establecer la Edad del Profesor
   
    /**
     * Método para para obtener la Nombre del Profesor
     * @return El Nombre del Profesor
     */
    public String getNombre(){ return nombre; }
   
     /**
     * Método para para obtener la Edad del Profesor
     * @return La Edad del Profesor
     */
    public int getEdad(){ return edad; }
   
     /**
     * Método para para obtener los Años Consolidados del Profesor
     * @return Los Años Consolidados del Profesor
     */
    public int getAgnosConsolidados(){ return agnosConsolidados; }
   
    /**
     * Método para para obtener el Salario Base del Profesor
     * @return El Salario Base del Profesor
     */
    public double obtenerSalarioBase() {
        return  725 + (agnosConsolidados * 33.25);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor
     */
    public void mostrarDatos() {
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
    } // Cierre del método para mostrar información del Profesor
   
} // Cierre de la Clase

Citar
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.
Código: [Seleccionar]
/**EJEMPLO DE HERENCIAS, MÉTODOS POLIMÓRFICOS Y ACCESO.<br>
 * Esta Clase define una Subclase que "bebe" de la Superclase Profesor_CU00693B.<br>
 * Clase 2 del Ejercicio del Tema "CU00693B tipos modificador acceso java public private protected visibilidad".
 * @author Lorenzo Fernández Asensio
 * @version 20151202.01
 */
public class ProfesorEmerito_CU00693B extends Profesor_CU00693B {
   
    //Campo específico de la subclase.
    private int agnosEmerito;
   
     /**
     * Constructor 1 del Profesor. Atribututos sin asignación de Valores
     * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00693B() {
        super();
        agnosEmerito = 0;
    } // Cierre del constructor 1
   
     /** Constructor 2 del Profesor. Atribututos con asignación de Valores
      * @param agnosEmerito El parámetro agnosEmerito define los años que lleva como Emerito el Profesor
     */
    public ProfesorEmerito_CU00693B(String nombre, int edad, int agnosConsolidados, int agnosEmerito) {
        super(nombre, edad, agnosConsolidados);
        this.agnosEmerito = agnosEmerito;
    } // Cierre del constructor 2
   
    /**
     * Método para establecer los Años que lleva el Profesor como Emerito
     * @param valorAgnosEmerito El parámetro valorAgnosEmerito define el valor de los Años como Emerito
     */
    public void setAgnosEmerito(int valorAgnosEmerito) {
        agnosEmerito = valorAgnosEmerito;
    } // Cierre del método para establecer los Años que lleva el Profesor como Emerito
   
    /**
     * Método para para obtener los Años que lleva el Profesor como Emerito
     * @return Los Años que lleva el Profesor como Emerito
     */
    public int getAgnosEmerito() { return agnosEmerito;}
   
    /**
     * Método para para obtener el Salario Base del Profesor Emerito
     * @return El Salario Base del Profesor Emerito
     */
    public double obtenerSalarioBase() {
    /* En la sigiente formula daría error al compilar si en la superclase Profesor se define "agnosConsolidados" como private
     * por usar "agnosConsolidados" directamente, sin utilizar una invocación a super ni un método get*/
        return 925 + (agnosConsolidados * 33.25) + (47.80 * agnosEmerito);
    } // Cierre del método para obtener el Salario Base del Profesor
   
    /**
     * Método para mostar la Información del Profesor Emerito
     */
    public void mostrarDatos() {
        //super.mostrarDatos(); // Se puede usar super sin problemas pero lo anulo para usar los campos directamente
        System.out.println ("Nombre: " + nombre);
        System.out.println ("De: " + edad + " años");
        System.out.println ("Con: " + agnosConsolidados + " años como Profesor Consolidado");
        System.out.println ("Más " + agnosEmerito + " años como Profesor Emerito");
        System.out.println ("Y un Sueldo Base de: " + obtenerSalarioBase());
    } // Cierre del método para mostar la Información del Profesor
   
} //Cierre de la clase

Citar
¿Es posible sin utilizar una invocación a super ni un método get?
Si. Se puede utilizar ya que protected permite que las subclases sí pueden tener acceso al campo o método.

Citar
¿Qué ocurre si el atributo en la superclase lo declaras private?
Al compilar la subclase salta un error “agnosConsolidados has private access in Profesor_CU00693B” en línea 50 “return 925 + (agnosConsolidados * 33.25) + (47.80 * agnosEmerito);“
No se permite usar directamente el atributo "agnosConsolidados" al estar como privado.

Espero vuestros comentarios,

Muchas Gracias,

Saludos,
« Última modificación: 04 de Diciembre 2015, 08:42 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas lo veo todo bien!

Salu2

Enzo

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 82
    • Ver Perfil
Hola Ogramar,

Muchas gracias,

Un Saludo,

 

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