I have build a subclass from a class in Java that has private methods which I want to access in the subclass, I cannot change or edit the superclass. The problem is of course they are private. Suppose I have written the superclass by myself and there were certain reasons why these methods have to be private. I could copy the code in the subclass. But is there a better way (without producing so much lines of code) to get able to work with them when writing a subclass?
Share
Ignoring that your reasons for wanting to do this are potentially very bad (there’s no contract for your usage of private variables, so there are no guarantees that they won’t change, or disappear completely!) you could probably do what you want using reflection:
Using:
http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getDeclaredField(java.lang.String)
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible(boolean)
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Field.html#get(java.lang.Object)
I just want to emphasise that you should consider the reasons for doing this and decide against it! If you own the code that you are extending, consider if you should instead make the field
protectedinstead ofprivate. Remember, hooking into code you’re not supposed to have access to breaks OOP principles (you’re circumventing encapsulation) and there are no guarantees the code your application depends on won’t disappear in an update to the library (so you’re also locking yourself down to a fixed version of the lib).