There's a base class ServerAdapter:
public abstract class ServerAdapter {
    public ServerAdapter() {
        initGUI();
    }
    protected abstract void initGUI();
}
And a child class that inherits ServerAdapter:
public abstract class LinuxServerAdapter extends ServerAdapter {
    protected CheckBox key = new CheckBox();
    public LinuxServerAdapter() {
        super();
    }
    @Override
    public void initGUI() {
        //NPE is thrown here, because key = null
        key.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                //Something happens here
            }
        });
    }
}
End class that inherits LinuxServerAdapter:
public class MyLinuxServerAdapter extends LinuxServerAdapter {
    public MyLinuxServerAdapter() {
        super();
    }
    public static void main(String args[]) {
        ServerAdapter server = new MyLinuxServerAdapter();
    }
}
NPE is thrown when I try to add clickHandler on a key.
Why key isn't initialized? Is this a case where initialization order works in a specific way?
 
     
    