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.