perguntas de classe interna / externa de java sobre acesso a variáveis privadas de classe externa
Eu tenho a seguinte classe java:
class Outer
{
private Integer a;
private Long b;
class Inner
{
public void foo()
{
System.out.println("a and b are " + a + " " + b);
}
}
}
Quando executo o javap em Outer e Outer $ Inner, recebo o seguinte:
C:\test>javap Outer
Compiled from "Outer.java"
class Outer extends java.lang.Object{
Outer();
static java.lang.Integer access$000(Outer);
static java.lang.Long access$100(Outer);
}
C:\test>javap Outer$Inner
Compiled from "Outer.java"
class Outer$Inner extends java.lang.Object{
final Outer this$0;
Outer$Inner(Outer);
public void foo();
}
Eu tenho duas perguntas:
1) por que o compilador java gera métodos estáticos que usam o parâmetro 'Outer', na classe externa, para acessar suas variáveis privadas? por que não exemplos de métodos que a classe interna pode chamar facilmente através desse membro de US $ 0?
2) por que esses $ 0 na classe interna são finalizados? o que acontecerá se não for final?
Obrigado e cumprimentos.