"this" refers the instance of current object, like a reference refers an instance of a object or class. In your code, you used OuterTest.id which is class name followed by a member, in
java you can only access a static member by using class name. Althouth reference veriable can access both static and non static member. That is why you got the error.
If you change your code to make id as static, it will work fine.
The way you did by removing OuterTest, it worked fine because id refers the member in your InnerTest which is inherited from OuterTest. So if you use id or this.id, it refers member id of InnerTest, it will give you result "Default". If you use OuterTest.this.id, it refers member id of OuterTest, you can know the result will be STP