소스코드 출처 http://dna.daum.net/technote/java/PrincipleOfJavaInternalForDeveloperEasyToLost

public class OuterClass {
   public int get(){
       int i = 9;
       int id = 99;
       int id2 = 99;
       final int id3 = 100000;

       class LocalInnerClass {
           int id = 100;

           LocalInnerClass(){
               System.out.println(“LocalInnerClass”);
           }

           int getId(){
               return id3 + id;
           }
       }

       LocalInnerClass lic = new LocalInnerClass();
       return id + lic.getId();
   }

   public static void main(String[] args){
       OuterClass outer = new OuterClass();
       System.out.println(“id = ” + outer.get());
       //결과 값은 “100000(id3) + 100(LocalInnerClass.id) + 99(OuterClass.get())” 인 100199가 나온다.
   }

}

분홍색으로 표시 된 부분의 id3 대신에 i 나 id2로 바꾸면 컴파일 에러가 발생합니다.

local에서 만들어진 class라고 해서 local에서 만들어진 지역 변수에 접근이 가능한 건 아니군요. 그런데 final로 선언된 것은 어떻게 접근이 가능한 것일까요..?