publicos publicas protegidas privados privadas privada palabra metodos ejemplo clases clase java inner-classes

publicas - En las clases anidadas de Java, ¿puede la clase adjunta acceder a miembros privados de clases internas?



private void java (1)

En Java, la clase interna puede acceder a los miembros privados de la clase adjunta. Pero, ¿puede la clase externa acceder a los miembros privados de la clase interna? Esto es independiente de si la clase interna es estática o no. Pensé que esto no es cierto, pero el siguiente código parece compilar y funcionar bien.

public class Outer { class Inner { private int i = 0; private Inner() {} } public static void main(String[] args) { Outer o = new Outer(); Outer.Inner oi = o.new Inner(); oi.i = 10; } }


Si está bien. Desde el JLS, sección 6.6.1 :

De lo contrario, si el miembro o el constructor se declara private , entonces se permite el acceso si y solo si ocurre dentro del cuerpo de la clase de nivel superior (§7.6) que encierra la declaración del miembro o constructor.

Incluso puede referirse a un miembro privado de tipo anidado X dentro de otro tipo anidado Y siempre que compartan una clase de nivel superior.

A nivel de bytecode, creo que todo esto se implementa agregando métodos sintéticos de acceso a paquetes.