a) Porque foi definido assim ( JLS, pg. 169 - parágrafo 8.4.3, Method Modifiers. Definição não se discute, cumpre-se; é a mesma coisa que falar com o seu advogado sobre a lei ou portaria número NNN
A compile-time error occurs if a method declaration that contains the keyword abstract also contains any one of the keywords private, static, final, native, strictfp, or synchronized.
b) Para você entender melhor, no caso de “native”, “synchronized” e “strictfp”, essas palavras-chave aplicam-se apenas a métodos “concretos”, ou seja, implementações. É um detalhe de implementação que um método seja “native” ou “synchronized” ou “strictfp”.
A palavra “abstract” é para métodos “abstratos”, ou seja, especificações. No caso “private”, é porque um método “private” é invisível em uma classe derivada, ou seja, não faz sentido especificar algo que não é mais visível.
[quote=fmartins]algúem sabe explicar porque o modificador de acesso abstract não pode
ser utilizado juntamente com synchronized e native?[/quote]
Alem da parte da especificacao mostrada pelo thingol, podemos analisar a questao logicamente: synchronized e native definem o comportamento do metodo - abstract diz exatamente o contrario, que o metodo se comportara conforme o desejo do provedor da implementacao.
Claro, isso depende da interpretacao de cada um e a lei eh a JLS - mas ajuda a entender.