重複の可能性:
インタビュー: 抽象クラスをインスタンス化できますか?
次のように、すべてのメソッドが定義された抽象クラスがあります (つまり、抽象メソッドが含まれていません)。
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
最初のケースでは割り当てが機能するのに 2 番目のケースでは機能しない理由、またはそこで実際に何が起こっているのか (結果として、抽象クラスのメソッドへのアクセスがテストで機能する理由) がよくわかりません。
誰かが説明してくれませんか (そして、なぜこれが機能するのかを説明する Javadoc、記事、または本を教えてください)。
そこで抽象クラスを「インスタンス化」できるのはなぜですか? (それは実際に私がしていることですか?)
内部クラスと関係がありますか?