Please check the Java code below:

public class Test
{
  public static void main(String arg[]) throws Throwable
  {
      Test t = new Test();
      System.out.println(t.meth().s);           //OP: Old value
      System.out.println(t.meth().getVal());    //OP: String Implementation
  }
  private TestInter meth()
  {
    return new TestInter()
    {
      public String s = "String Implementation";
      public String getVal()
      {
        return this.s;
      }
    };
  }
}
interface TestInter
{
  String s = "Old value";
  String getVal();
}

As you see I have created an interface anonymously. When I access the interface variable directly, it will show "Old value".

t.meth().s => "Old value"

Accessing it through the getVal() method returns proper values,

t.meth().getVal() => "String Implementation"

I don't understand how this code works, can somebody explain it to me?

Edit
Report