I have a pair of classes looking like this;
public abstract class Class1 { //... public Class1() { //... function2(); //... }
Your design is an instance of the "leaked this problem" and is an anti-pattern in Java. You should never call out to a publicly overridable method from a constructor.
this