如果你有一个抽象类,你可以通过派生一个具体的匿名类来实例化它。这是一个例子:如何匿名实例化存储在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 ..你了解我的评论吗? –