La clase interna es la clase definida dentro de una clase, y la clase interna se puede declarar como pública, privada, protegida. Si la clase interna se define como privada y protegida, ¿puede la clase externa acceder a los miembros de la clase interna? y puede la clase interna tener acceso a los miembros de la clase externa?¿Puede una clase externa acceder a los miembros de la clase interna?
Respuesta
Si la clase interna define como privada y protegido, puede acceder clase externa los miembros de la clase interna?
Sí. Estos calificadores solo afectarán la visibilidad de la clase interna en las clases que se derivan de la clase externa.
¿Puede la clase interna acceder a miembros de clase exterior?
Sí, incluidos los declarados private
, al igual que cualquier método de instancia puede.
podemos simplemente llamar directamente a los métodos de clase internas de la clase externa o por el objeto de la clase interna @Hippo –
@MuhammadBabar por el objeto de la clase interna – light
"Una clase anidada es una clase definida dentro de otra clase. Una clase anidada debería existir sólo para servir a su clase envolvente. Si una clase anidada sería útil en algún otro contexto, entonces debería ser una clase de nivel superior Hay cuatro tipos de clases anidadas :.. las clases miembro estáticas, clases de miembros no estáticos, clases anónimas, y las clases locales, pero el primer tipo se conoce como interiores clases ".
(Joshua Bloch, del libro Effective Java.)
En cuanto a sus preguntas: es muy fácil de probar por sí mismo. Pero la respuesta es sí (incluso para los miembros private
), siempre que no intente acceder a un miembro no estático (que no sea de una referencia) desde un contexto estático o intente acceder a un miembro que se encuentre en un ámbito inaccesible .
Es decir, mucho como uno esperaría =).
En general, puede (acceder a campos privados en clases internas y viceversa). El código siguiente se compila bajo Eclipse:
public class Outer {
private int x;
public void f() {
Inner inner = new Inner();
inner.g();
inner.y = 5;
}
private class Inner {
private int y;
public void g() { x = 5; }
}
}
Dicho esto, se puede configurar el IDE/compilador para tratar los accesos a campos tales como errores (en Eclipse esta configuración se denomina "Acceso al miembro no accesible de un tipo envolvente ", en Preferencias -> Java -> Compilador -> Error/Advertencias -> Estilo de código)
Intenté hacer esto, y me dio este error en Android 'intentado leer del campo 'int com.backspace.memebook.MainActivity $ MyTask.counter' en una referencia de objeto nulo' –
Sí! Puede acceder a un miembro de la clase interna desde la clase externa y viceversa (independientemente del modificador de acceso). Sin embargo, para una clase anidada estática no puede acceder a su campo con sólo el nombre del campo, y hay que acceder a ella como
InnerClass.staticInnerField
aunque se puede acceder a los campos estáticos de la clase externa de la clase interna directamente por los nombres de los campos.
explicación está en el contexto de la clase interna periódica [clases internas regulares no pueden tener los miembros estáticos dentro de ellos declarados]
puede acceder a cualquier campo de la clase externa de clase interna directamente.
class Outer {
private static int x = 0;
class Inner {
void print() {
System.out.println(x); // x can be directly accessed
}
}
public static void main(String[] args) {
new Outer().new Inner().print();
}
}
Incluso la clase Outer puede acceder a cualquier campo de la clase interna pero a través del objeto de la clase interna.
class Outer {
private class Inner {
private int x = 10;
}
void print() {
Inner inner = new Inner();
System.out.println(inner.x);
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.print();
}
}
- 1. acceso a los datos privados de los miembros de la clase externa en la clase interna
- 2. ¿Cómo se puede acceder a "esto" de la clase externa desde una clase interna?
- 3. cómo acceder a una variable de clase de la clase externa de clase interna en rubí
- 4. Clase interna que accede a la clase externa
- 5. ¿Cómo acceder a la variable de clase externa sombreada desde la clase interna?
- 6. No se puede acceder a la clase interna en bean
- 7. La subclasificación clase interna de la clase externa versus otra clase interna
- 8. ¿Cómo acceder a los miembros estáticos de una clase?
- 9. En clases anidadas de Java, ¿puede la clase adjunta acceder a miembros privados de clases internas?
- 10. Clase que accede a partes internas de clase interna?
- 11. ¿Cómo puede una clase anidada acceder a un método en la clase externa en Ruby?
- 12. acceso clase externa "super" de clase interna en Java
- 13. acceso clase interna al método de la clase externa, mismos nombres de los métodos
- 14. ¿Puede un método en una clase interna acceder a un método de clase padre?
- 15. amigo con clase pero no puede acceder a miembros privados
- 16. Acceso a los miembros internos de la clase anónima
- 17. ¿Seguro para AsyncTask interno para acceder a los campos de miembros privados de la clase de actividad externa?
- 18. Cómo acceder a una variable desde la clase interna
- 19. clase interna y externa de clase en C#
- 20. ¿Cómo uso los ayudantes de clase para acceder a miembros privados estrictos de una clase?
- 21. ¿Cómo hacer referencia a la clase externa en otra instancia de una clase interna no estática?
- 22. En Java, ¿cómo accedo a la clase externa cuando no estoy en la clase interna?
- 23. ¿Cuándo debería una clase usar sus propios getters/setters frente a acceder directamente a los miembros?
- 24. Devuelve el puntero a la clase interna anidada de la clase externa genérica
- 25. Llamar a la función de clase externa desde la clase interna
- 26. Miembros públicos e internos en una clase interna?
- 27. de palabra clave para la clase externa de una clase interna anónima
- 28. Creando una instancia de la clase interna
- 29. ¿Propósito de una clase interna?
- 30. ¿Es posible cambiar la instancia de clase externa de una clase interna en Java?
ha intentado? Probablemente sea más rápido probar cosas como estas tú mismo. – whirlwin