这是我的超类Animal
class Animal
{
//Empty
}
我的子类
Tiger
class Tiger extends Animal
{
public static void TigerPrint()
{ -------
System.out.println("Tiger");
}
public void Run()
{
System.out.println("Tiger Running");
}
}
现在我知道了
Animal a=new Tiger();
编译时
a
是Animal
,运行时是Tiger
。所以我做了
a.getClass().getMethod("TigerPrint").invoke(null);//WORKS
a.getClass().getMethod("Run").invoke(null);//NOT WORKING (NullPointerException)
如何通过反射调用
Run
的subclass
方法。是的,我可以
((Tiger)a).Run();
但是我该如何反思呢!
最佳答案
您正在对空实例调用实例方法-因此,收到NPE是有意义的。尝试以下方法(将实例传递给invoke
方法而不是null
):
a.getClass().getMethod("Run").invoke(a);
注意:第一个调用有效,因为您可以在空实例上调用静态方法而不会引起NPE。