Reading with reflection. public static java.lang.Object art.Test1982$Transform.BAR on (ID: 0) = (ID: 1) value of public static java.lang.Object art.Test1982$Transform.FOO on (ID: 0) = (ID: 2) value of Reading with reflection on subtransform instance. public static java.lang.Object art.Test1982$Transform.BAR on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 1) value of public static java.lang.Object art.Test1982$Transform.FOO on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 2) value of public int art.Test1982$SuperTransform.id on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 4) 2 Reading normally. Read BAR field: (ID: 1) value of Read FOO field: (ID: 2) value of t1 is (ID: 5) SuperTransform { id: 1, class: class art.Test1982$Transform } t2 is (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } Redefined: class art.Test1982$Transform[FOO: value of , BAR: value of , BAZ: null] Reading with reflection after redefinition. public static java.lang.Object art.Test1982$Transform.BAR on (ID: 0) = (ID: 1) value of public static java.lang.Object art.Test1982$Transform.BAZ on (ID: 0) = (ID: 0) public static java.lang.Object art.Test1982$Transform.FOO on (ID: 0) = (ID: 2) value of Reading with reflection after redefinition on subtransform instance. public static java.lang.Object art.Test1982$Transform.BAR on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 1) value of public static java.lang.Object art.Test1982$Transform.BAZ on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 0) public static java.lang.Object art.Test1982$Transform.FOO on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 2) value of public int art.Test1982$SuperTransform.id on (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } = (ID: 4) 2 Reading normally after possible modification. Read FOO field: (ID: 2) value of Read BAR field: (ID: 1) value of t1 is (ID: 5) SuperTransform { id: 1, class: class art.Test1982$Transform } t2 is (ID: 3) SuperTransform { id: 2, class: class art.Test1982$SubTransform } new SubTransform is (ID: 6) SuperTransform { id: 1003, class: class art.Test1982$SubTransform } myToString of (ID: 6) SuperTransform { id: 1003, class: class art.Test1982$SubTransform } is SubTransform (subclass of: class art.Test1982$Transform[FOO: value of , BAR: value of , BAZ: null]) { id: 1003 } Creating new transform from t1 class = (ID: 7) SuperTransform { id: 1004, class: class art.Test1982$Transform }