我们可以使用反射调用抽象类的私有方法吗?

时间:2014-08-11 11:32:04

标签: java oop reflection abstract-class

我们可以使用反射调用抽象类的私有方法吗?

3 个答案:

答案 0 :(得分:3)

是的,你可以。 您可以使用反射。 你需要什么 -

  
      
  1. Abstract Class的类对象。
  2.   
  3. 将方法的可访问性动态设置为 true 。请检查以下代码。
  4.   
class ExitPuzzle extends MyAbstractClass {
    public static void main(String... args) throws IllegalArgumentException,
            IllegalAccessException, InvocationTargetException {
        Class clazz = MyAbstractClass.class;
        Method[] methods = clazz.getDeclaredMethods();
        System.out.println(Arrays.toString(methods));
        methods[0].setAccessible(true);
        methods[0].invoke(new ExitPuzzle(), null);
    }

}

abstract class MyAbstractClass {
    private void myMethod() {
        System.out.println("in MyAbstractClass");
    }
}

O / P:

[private void MyAbstractClass.myMethod()]
in MyAbstractClass

答案 1 :(得分:1)

你应该创建一个扩展抽象类的concrete class实例,或者你应该为抽象类创建一个anonymous inner class instance(并覆盖标记为abstract的方法)。然后你可以使用那个实例和通过制作setAccessible(true)来使方法可访问。除非你搞砸SecurityManager(在大多数情况下你不习惯),否则这将有效。然后你可以调用方法

答案 2 :(得分:0)

是的,你可以。

但是你需要一个对象,它是一个抽象类的实例。