I had forgotten how inheritance works, and this had been conflicting
with the super.key value, and was therefore resulting in a NPE, because
each constructor referenced back to the parent constructor, and therefore
the parent instance, leaving the child instance uninitialized.
By removing the key member variable from all child classes, referencing
key calls back to the abstract parent class (because this variable is
protected instead of private), and everything works as expected.
I had forgotten how inheritance works, and this had been conflicting with the super.key value, and was therefore resulting in a NPE, because each constructor referenced back to the parent constructor, and therefore the parent instance, leaving the child instance uninitialized.
By removing the key member variable from all child classes, referencing key calls back to the abstract parent class (because this variable is protected instead of private), and everything works as expected.