dúvida sobre classes

Pessoal

Não entendi essa questão. Que a B é correta eu até entendo, mas pq a A ou a C não são corretas?

Qual das seguintes declarações de classes é valida? Considere que nenhuma das classes são aninhadas e cada uma está dentro de um arquivo ‘.java’ com o mesmo nome que a classe.

a) protected class Classe{}
b) public abstract class Classe{} //<–correta
c) private class Classe{}
d) static class Classe{}
e) synchronized Classe{}

A letra A, C, D e E estão erradas porque uma classe só pode ser pública e pode somente utilizar os modificadores abstract e final :wink:

[]'s

Agora vamos interpretar a língua de advogado, desculpe, a Java Language Specification.
Aqui você já deve entender que uma classe só pode ser: public, protected, private, abstract, static, final, strictfp, ou então não ter modificadores. Então ela não pode ser “synchronized”.
“Top Level Class” é a classe que não é aninhada.
Ele diz que “protected” e “private” só valem para classes aninhadas (“member classes within a directly enclosing class declaration”), assim como “static”.
Ele também diz que “public” deve ser para uma classe não aninhada (“top level class”) e em outro item (§7.6), ele diz que classes públicas, se forem armazenadas em arquivos, devem estar em um arquivo “.java” com o mesmo nome da classe.
Ele diz (por omissão) que uma classe não aninhada pode ser “package private”, ou seja, não é preciso usar “public”, mas nesse caso essa classe somente será visível dentro do seu pacote.
Aqui
Portanto a declaração correta é apenas “b”.