Modificadores de acesso

pessoal,

algúem sabe explicar porque o modificador de acesso abstract não pode
ser utilizado juntamente com synchronized e native?

Ex.: pode cair na prova algo assim, verificando se compila ou naum?


public abstract synchronized native void teste();

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 :wink:

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.

abstract não é um modificador de acesso.

[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. :smiley:

Marcio Kuchma

blza…
sakei!

era isso sabia que esse modificador tinha essas regras , mas naum
sabia direito o porque… , mas de qualquer forma valeu.

eh isso mesmo ,

[quote]
abstract não é um modificador de acesso. [/quote]

seria modificador de método e classe :wink: