thisはどこからコレなのか

Javaで下のコードを実行すると何が表示されるでしょう。

public class ScopeOfThis {
    public int a = 100;
    public ScopeOfThis() {
        System.out.println("first:" + a);
        class Foo {
            public int a = this.a++; 
            public Foo(){
                int a = this.a++;
                System.out.println("inside(a):" + a);
                System.out.println("inside(this.a):" +this.a);
            }
        }
        new Foo();
        System.out.println("last:" + a);        
    }
    public static void main(String[] args) {
        new ScopeOfThis();
    }
}

いきなり答えだと考えるチャンスを奪ってしまうのでスポイラー代わりに
Pythonで似たようなことを書いてみました。
下のように書くと:

class ScopeOfThis(object):
    a = 100
    def __init__(self):
        print "first:", self.a
        class Foo(object):
            a = self.a
            self.a += 1
            def __init__(self):
                a = self.a
                self.a += 1
                print "inside(a):", a
                print "inside(self.a)", self.a

        Foo()
        print "last:", self.a


ScopeOfThis()

こう表示されます:

first: 100
inside(a): 100
inside(self.a) 101
last: 101
        • -

解答篇:

Javaで上のコードを実行すると下のように表示されます。

first:100
inside(a):0
inside(this.a):1
last:100

Fooのフィールドを初期化する時点ですでにthisはFooのインスタンスを指しているわけですね〜。

疑問点

  • public int a = this.a++;をpublic int a = a++;にするとコンパイルエラーになる。