如果你有一個抽象類,你可以通過派生一個具體的匿名類來實例化它。這是一個例子:如何匿名實例化存儲在Java類對象中的抽象類?
abstract class A {
abstract void hello();
}
A say = new A() { void hello() { System.out.println ("hello"); } }
say.hello(); // -> hello
如何做到這一點,如果該類存儲在一個類對象?下面是一個例子:
// -*- compile-command: "javac anon.java && java anon"; -*-
class anon
{
anon() throws Exception {}
abstract class AbstractClass
{
AbstractClass() throws Exception {}
abstract void id();
}
AbstractClass x = new AbstractClass()
{
void id() { System.out.println ("X"); }
};
Class<AbstractClass> abstractclass
= (Class<AbstractClass>)Class.forName ("anon$AbstractClass");
AbstractClass y = abstractclass.getConstructor().newInstance();
public static void main (String argv[]) throws Exception
{
anon main = new anon();
main.x.id(); // should print "X"
main.y.id(); // should print "Y"
}
}
第一實例(X)工作正常,但因爲它試圖直接實例化抽象類,而不導出具體類的第二(y)的失敗。我如何在只有Class對象的Java中執行此操作?
等待。你有沒有嘗試用第一個代碼實現第二種方式?我認爲它也不會在那裏工作。你爲什麼試圖像這樣實例化一個抽象類?當你創建一個匿名類時,實際上是擴展你的抽象類並實例化它,而不是抽象類本身。 –
沒有y.id()應該打印「Y」。 – ceving
@ceving ..你瞭解我的評論嗎? –