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?