如何通过对象使用类的私有或者保护域的方法

如果是静态方法,直接可以用类调用。

正常情况下,如果是非静态的:

1,是保护方法,那么就需要继承才能使用了。
2,是私有的那么就不能访问了。

但是可以通过对象反射调用所有的方法,甚至是私有的。

比如:ClassLoader的保护方法defineClass

一般用在自定义的类加载器中
Method defineClassMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); defineClassMethod.setAccessible(true);
//加载想要加载的类 defineClassMethod.invoke(cl.getParent(), classBytes,
0, classBytes.length);

总结好处是:无需继承那个类才能使用其保护域方法。甚至可以使用私有方法。

 

posted @ 2018-02-07 20:05  假程序猿  阅读(473)  评论(0)    收藏  举报