I have a controller class which extends a simple java class. Now inside the base class I declare a button whose name matches the fx:id of the button in the fxml file. Now when the fxml is loaded the controller is initialized. however, the button is not initialized and is still null. I presume the button should have been initialized by itself.

Perhaps @FXML doesn't work with inheritence.
I'd be interested to know if this works when you follow edward's advice and change the access permissions of the fields.
If it doesn't, then you will need to define the superclass fields in the subclass to get their injection working.