Possible Duplicate:
Interview : Can we instantiate abstract class?
I have an abstract class with all its methods defined (i.e. there are no abstract methods contained within it) like the following:
public abstract class MyAbstractClass {
  String s;
  public void setString(String s) {
    this.s = s;
  }
  public String getString() {
    return this.s;
  }
}
There is also a JUnit test class:
public class TestClass {
  MyAbstractClass c;
  @Before
  public void setUp() {
    // What is happening here? And why does this work with an abstract class?
    // Instantiation? Extending the abstract class? Overwriting?
    c = new MyAbstractClass() { };
    // This will not work: (Why?)
    // c = new MyAbstractClass();
  }
  @Test
  public void test_AllMethodsAvailable() {
    // Why can I access the abstract class' methods?
    // Shouldn't they be overwritten? Or did I extend the class?
    c.setString("Test");
    assertEquals("Test", c.getString());
  }
}
I don't quite understand why the assignment to c works in the first case but not in the second, or what is actually happening there (and as a consequence, why accessing the abstract class' methods works in the test). 
Can somebody please explain (and possibly point me to a Javadoc, article or book that explains why this works)?
Why can I "instantiate" an abstract class there? (Is that actually what I'm doing?)
Has it to do with inner classes?
 
     
     
     
     
    