可能重复:
面试:我们可以实例化抽象类吗?
我有一个定义了所有方法的抽象类(即其中不包含抽象方法),如下所示:
public abstract class MyAbstractClass {
String s;
public void setString(String s) {
this.s = s;
}
public String getString() {
return this.s;
}
}
还有一个 JUnit 测试类:
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());
}
}
我不太明白为什么分配给c
在第一种情况下有效但在第二种情况下无效,或者那里实际发生了什么(因此,为什么访问抽象类的方法在测试中有效)。
有人可以解释一下(并可能指向我解释为什么这样做的Javadoc,文章或书籍)吗?
为什么我可以在那里“实例化”一个抽象类?(这实际上是我在做什么?)
它与内部类有关吗?