我们可以使用反射调用抽象类的私有方法吗?
答案 0 :(得分:3)
是的,你可以。 您可以使用反射。 你需要什么 -
- Abstract Class的类对象。
- 将方法的可访问性动态设置为 true 。请检查以下代码。
醇>
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)
是的,你可以。
但是你需要一个对象,它是一个抽象类的实例。