2013-04-30 2483 views

回答

0

我假设你问如何通过反射调用它,而没有AbstractClass的实例?如果这是个问题,你不能这样做。要调用一个类的实例方法(即使通过反射),你必须有一个实例来调用该方法。由于该方法是公开的,如果你有一个实例,你可以直接调用它。

+0

是林经由反射调用方法。是否有可能拥有一个抽象类的实例? – user1824107 2013-04-30 17:39:05

+0

只有拥有一个具体子类的实例。如果您没有具体子类的实例,则无法调用该方法。 – 2013-04-30 17:40:34

+0

@ user1824107'AbstractClass.class.getMethod(“getName”)。invoke(objConcreteClass);' – 2013-04-30 17:42:52

1

如果你有concreteObject并没有参数:

AbstractClass.class.getMethod("getName").invoke(concreteObject); 

有关详细信息,你可以读取方法的Java文档中的类Class

+0

'NoSuchMethodException' – 2013-04-30 17:18:49

+0

当然,在上面他可以刚刚完成'concreteObject.getName()',因为它是公开的。 – 2013-04-30 17:19:20

+0

@Garrett Hall您可能的意思是'[...] getMethod(“getName”)[...]''1)'AbstractClass'没有'blahBlah'方法2)OP询问'getName'方法。 – Pshemo 2013-04-30 17:46:44

0

尝试这种情况:

class MyTest { 
    @Test 
    public void test1() throws Exception { 
     class TestClass extends AbstractClass { 
      // implement abstract methods if exists 
     } 
     Method method = AbstractClass.class.getDeclaredMethod("getName"); 
     String str = (String) method.invoke(new TestClass()); 
     assertEquals(" AbstractClass", str); 
    } 
}