Em classes aninhadas Java, podem os colocando de acesso de classe membros privados de classes internas?
-
19-09-2019 - |
Pergunta
Em Java, a classe interna pode acessar membros privados de anexando classe. Mas podem os de acesso classe externa membros privados da classe interna? Isto é, independentemente de classe interna é estático ou não. Eu pensei que isso não é verdade, mas o código a seguir parece compilar e funcionar bem.
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;
}
}
Solução
Sim, isso é bom. A partir dos JLS, secção 6.6. 1 :
Caso contrário, se o membro ou construtor é declarado
private
, então o acesso é permitido se, e somente se ocorrer dentro do corpo da classe nível superior (§7.6) que inclui a declaração do membro ou construtor.
Você pode até se referir a um membro particular do tipo aninhado X dentro de outro tipo aninhado Y, desde que eles compartilham uma classe de nível superior.
No nível bytecode, eu acredito que tudo isto é implementado pela adição de métodos pacote de acesso sintético.