Autor Tema: declaracion de atributos y acceso desde subclases java  (Leído 5818 veces)

Notanumber

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
declaracion de atributos y acceso desde subclases java
« en: 12 de Abril 2014, 21:24 »
Buenas, al declarar private un atributo de una clase, sus subclases no pueden usar dichos atributos? porque en general estos atributos son privados, pero la subclase puede cambiarlos igualmente, ejemplo:

//Código de la clase Persona ejemplo aprenderaprogramar.com
public class Persona {
private String nombre; private String apellidos; private int edad;
public Persona() { nombre = ""; apellidos = ""; edad = 0; }
public Persona (String nombre, String apellidos, int edad) {
this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; }
public String getNombre() { return nombre; }
public String getApellidos () { return apellidos; }
public int getEdad() { return edad; }
} //Cierre de la clase


public class Profesor extends Persona { //Ejemplo aprenderaprogramar.com
private String IdProfesor;
public Profesor () { super();
IdProfesor = "Unknown";}
public Profesor (String nombre, String apellidos, int edad) {
super(nombre, apellidos, edad);
IdProfesor = "Unknown"; }

aqui vemos como public profesor, puede definir nombre apellidos y edad que son atributos private de persona, no entiendo porque esto es posible si han sido declarados private en persona.
Gracias y un saludo
« Última modificación: 13 de Abril 2014, 21:51 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re: declaración de atributos y acceso desde subclases java
« Respuesta #1 en: 13 de Abril 2014, 21:51 »
La subclase no puede usar los atributos de su superclase si han sido declarados como private en sus métodos, ya que no puede tener acceso a ellos.

Sin embargo, sí puede simplemente inicializarlos a través del constructor con el fin de que cuando se cree un objeto de la subclase (que tendrá los atributos de la superclase por herencia) no se encuentren vacíos.

Ejemplo: si pones este código en la superclase Persona no tienes problema:

Código: [Seleccionar]
             public void cambiaValorNombreYMuestralo(){
             nombre = "Nombre cambiado";
             System.out.println ("El nombre cambiado es " + nombre);
            }

En cambio si pones ese mismo código en la subclase Profesor te sale un mensaje de error del tipo "nombre has private access in Persona", es decir, que no puedes acceder al atributo de la superclase desde la subclase.

Sin embargo, puedes modificar este comportamiento declarando el atributo como tipo protected en la superclase. Saludos.

 
Responsable de departamento de producción aprenderaprogramar.com

 

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