I’m working on making a derived version of the Presto Hive plugin. Unfortunately, the base class I need to inherit from uses its own private class loader, and the function I need to override (which is override-able!) for some reason requires that class loader as a parameter.
Anyway, long story short, I need to get the parent object’s private field to use it in the sub class I’m creating. Reflection to the rescue!
Note: This is not generally good programming practice. Understand what the code does and why it does it before doing this.
Solution
//Class A file.
public class ClassA {
private String name;
public ClassA() {
this.name = "Hello World!";
}
}
// Class B file.
import java.lang.reflect.Field;
public class ClassB extends ClassA {
public ClassB() {
super();
}
public void printSuperPrivateMember() throws Exception {
Field nameField = ClassA.class.getDeclaredField("name");
nameField.setAccessible(true);
System.out.println((String) nameField.get(this));
}
public static void main(String[] args) throws Exception {
ClassB b = new ClassB();
b.printSuperPrivateMember();
}
}