2012-01-06 15 views
5

Si hereda de una actividad en la que se declararon ciertas variables miembro, ¿cómo accede a estas variables miembro en la subclase que ejecuta la herencia?Acceso a variables de clase heredadas en java

nombres
+0

También compruebe que no tiene un conflicto de nomenclatura: http://java.sys-con.com/node/46344 si se encuentra con un comportamiento inesperado – jefflunt

Respuesta

7

public o protected miembro puede acceder a través this.memberName de cualquier constructor o static método no o inicializador.

private o miembros de nivel de paquete (a los que se accede desde una subclase en un paquete diferente) no se puede acceder directamente y se deberá acceder a través de una interfaz sin privilegios como public getter.

2

Si los miembros se declararon private, o si se declararon con acceso predeterminado (paquete) y su subclase está en una clase diferente, no puede acceder a las variables. Si se proporcionaron accessors, puede usarlos. De lo contrario, no son accesibles.

Si los miembros fueron declarados protected o public, a continuación, acceder a ellos como si ellos fueron declarados en su propia clase (this.var, o simplemente var si no hay ambigüedad). Si tiene un miembro en la subclase con el mismo nombre que la superclase, puede usar super.var para acceder a la variable de superclase.

+0

¿Le importaría explicar al infractor? –

+1

+1 para contrarrestar el voto negativo inexplicado. – mre

4
class A { 
    protected int a = 3; 
} 

class B extends A { 
    protected int b = 2; 

    void doIt() { 
     System.out.println("super.a:" + super.a); 
     System.out.println("this.b: " + this.b); 
    } 
} 
+0

No necesita la palabra clave 'super'. – mre

+1

Eso es correcto. Pero esta es una pregunta para principiantes. Por lo tanto, quiero dejarlo absolutamente claro. – ollins

+2

Solo necesitaría la palabra clave 'super' si el campo estaba oculto por un campo en la subclase. –

1

Como otros han dicho, los campos públicos y protegidos se puede acceder a través de this.field de la subclase. También se puede acceder a los campos privados del paquete de la misma manera, pero solo si la subclase está en el mismo paquete que el padre.

No se puede acceder a los campos privados de esta manera, pero se puede acceder utilizando Java reflection, si la configuración de seguridad lo permite. Por lo general, no es una práctica recomendada (los miembros privados suelen ser privados por algún motivo), pero puede ser útil en algunas situaciones, por ejemplo, para acceder a miembros privados de la clase con el fin de probar el código. Consulte the answers to this question para saber cómo usar la reflexión de esta manera.

Cuestiones relacionadas