Puxa, se houvesse caído uma questão dessas na minha prova, tinha rodado bonito.
De fato, conforme você pode ver, a única coisa que distingue as opções é realmente a posição da declaração.
Mas isso só pode ser respondido adequadamente se você souber de cor o parágrafo 8.4 da JLS ( http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.4 ) e entender direitinho essa língua de advogado.
Traduzindo a língua de advogado para o português, ele diz que uma declaração de método deve ter, nesta ordem:
- Os modificadores do método (public, static, etc.)
- A seguir, os parâmetros de tipos (é essa parte de <X, Y extends X> que você viu nessa declaração)
- Então o tipo de retorno (neste caso é o “boolean”)
- E por fim o nome do método, e os parâmetros.
A opção B está com a ordem 1, 2, 1, 3, 4 (ou seja, está errada), e a opção C está com a ordem 1, 3, 2, 4 (que também está errada).