It does not create an instance of abstract Two
. It creates a concrete, anonymous class that extends Two
and instantiates it.
It's almost equivalent to using a named inner class like this:
class One {
public Two two(String s) {
return new MyTwo();
}
class MyTwo extends Two {
public int display() {
System.out.println("display()");
return 1;
}
}
}