Autor Tema: Ejercicio CU00693B modificadores private y protected java  (Leído 3630 veces)

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola
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.

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?
Clase Profesor
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * @author (Toni)
 * @version (0)
 */
public class Profesor {             // Atributos de la clase Profesor
    protected String nombre;
    protected int edad;
    protected int añosConsolidados;
    //Constructor para objetos de la clase Profesor
    public Profesor(String nombre,int edad,int añosConsolidados) {            // Inicializa atributos
        this.nombre = nombre;
        this.edad = edad;
        this.añosConsolidados = añosConsolidados;
    } // Fin del constructor Profesor

    // Siguen los setters para los atributos de la clase Profesor
    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; }
    // Ahora los getters para los atributos de la clase Profesor
    public String getNombre ()                             { return nombre; }

    public int getEdad ()                                  { return edad; }

    public int getAñosConsolidados ()                      { return añosConsolidados; }
    // Y seguidamente, metodos varios.

} // Fin de la clase Profesor
Clase ProfesorEmerito
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * @author (Toni)
 * @version (0)
 */
public class ProfesorEmerito extends Profesor {             // Atributos de la clase ProfesorEmerito
    private int añosEmerito;
    //Constructor para objetos de la clase ProfesorEmerito
    public ProfesorEmerito(String nombre,int edad,int añosConsolidados, int añosEmerito) {            // Inicializa atributos
        super(nombre, edad, añosConsolidados);
        this.añosEmerito = añosEmerito;
    } // Fin del constructor ProfesorEmerito

    // Siguen los setters para los atributos de la clase ProfesorEmerito
    public void setAñosEmerito (int añosEmerito)         { this.añosEmerito = añosEmerito; }
    // Ahora los getters para los atributos de la clase ProfesorEmerito
    public int getAñosEmerito ()                         { return añosEmerito; }
    // Y seguidamente, metodos varios.
    public double obtenerSalarioBase()      { return 925 + super.añosConsolidados * 33.25d + 47.80d * añosEmerito; }
} // Fin de la clase ProfesorEmerito
En la clase ProfesorEmerito, podemos acceder al atributo 'añosConsolidados' de la clase Profesor como si fuera uno propio, debido a que se declaró como 'protected'.
Este modificador se utiliza para que la subclase acceda al atributo de la superclase de la misma forma que accede a sus propios atributos.
Si este atributo se hubiera declarado 'private', para acceder a él desde la subclase, solo se podría hacer con el método 'getAñosConsolidados ()'

Clase Test
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * @author (Toni)
 * @version (0)
 */
public class Test {         
        public static void main (String [] args) {
            ProfesorEmerito pe = new ProfesorEmerito("Eduardo",33,10,5);
            System.out.println("Salario base: " + pe.obtenerSalarioBase());
        } // fin del main
} // Fin de la clase Test
« Última modificación: 31 de Agosto 2014, 10:52 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio CU00693B modificadores private y protected
« Respuesta #1 en: 14 de Agosto 2014, 00:03 »
Hola toni, respuestas y código las veo correctas.

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


Podríamos responder con que es tanto válido:

{ return 925 + super.añosConsolidados * 33.25d + 47.80d * añosEmerito; }

Como:

{ return 925 + añosConsolidados * 33.25d + 47.80d * añosEmerito; }


Esto siempre que añosConsolidados esté declarada como protected, si se declara private no es posible el acceso de una forma ni de otra, ya que aparecería el mensaje de error "añosConsolidados has private access in Profesor"

Saludos

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00693B modificadores private y protected
« Respuesta #2 en: 14 de Agosto 2014, 22:13 »
Gracias Alex por revisar mi ejercicio.

En cuanto al uso de la palabra clave 'super', estoy acostumbrándome a usarla.
Todavía no la tengo interiorizada, espero superar eso a fuerza de utilizarla.

Saludos

 

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