Em classes aninhadas Java, podem os colocando de acesso de classe membros privados de classes internas?

StackOverflow https://stackoverflow.com/questions/2221607

  •  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;
    }
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top