Why not abstract fields?
You can do what you described by having a final field in your abstract class that is initialised in its constructor (untested code): abstract class Base { final String errMsg; Base(String msg) { errMsg = msg; } abstract String doSomething(); } class Sub extends Base { Sub() { super(“Sub message”); } String doSomething() { return … Read more