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(); } }