Questão de Programação — Linguagens de programação — FUNDATEC 2025
Programação›Linguagens de programação
Código
qg474909
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2025
Nível
Superior
Cargo
Analista em Computação / Ênfase em Programação de Sistemas na Tecnologia JAVA
Na linguagem Java 17, existe a possibilidade de limitar quais classes podem realizar herança de uma superclasse. Sendo assim, qual alternativa preenche corretamente a lacuna na declaração da superclasse a seguir?
Aclosed
Bblocked
Climited
Dlocked
Esealed
Revelar gabarito e comentário▾
GabaritoE — sealed
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Classes seladas em Java (sealed classes)
Gabarito: letra E. Em Java 17, a palavra-chave que limita quais classes podem herdar de uma superclasse é sealed — a alternativa E. Com sealed, a superclasse declara explicitamente as subclasses permitidas, e todas as demais ficam impedidas de estendê-la.
O recurso de classes seladas foi introduzido como feature preview no Java 15 e tornou-se definitivo no Java 17 (JEP 409). Ele atende a um problema clássico da orientação a objetos: o controle da hierarquia de herança. Em Java, antes desse recurso, qualquer classe poderia ser estendida por qualquer outra (a menos que fosse final), o que dificultava a manutenção e a segurança do código. Com sealed, o autor da superclasse define um conjunto fechado de subclasses, garantindo que apenas aquelas listadas possam herdar.
A sintaxe básica é:
public sealed class Animal permits Cachorro, Gato {
// ...
}
Nesse exemplo, Animal só pode ser estendida por Cachorro e Gato. Qualquer outra tentativa de herança gera erro de compilação. As subclasses permitidas devem estar no mesmo módulo ou pacote (ou em pacotes nomeados no permits), e cada uma delas deve ser declarada como final, sealed ou non-sealed — ou seja, a cadeia de herança continua controlada.
A palavra sealed também se aplica a interfaces, permitindo restringir quais classes ou interfaces podem implementá-la ou estendê-la. Esse recurso é especialmente útil em pattern matching (como o switch de padrões), pois o compilador sabe exatamente quais subtipos existem, permitindo verificar a exaustividade dos casos.
A banca explora aqui a memorização da palavra-chave exata. As alternativas A, B, C e D são distratores plausíveis — palavras em inglês que sugerem a ideia de "limitar" ou "bloquear", mas que não existem na sintaxe Java. O candidato que conhece o recurso responde de imediato; quem não conhece pode ser tentado a escolher uma das outras por associação semântica.
NÃO CAIA NESSA!
A banca aposta no candidato que conhece o conceito (limitar herança) mas não a palavra-chave exata. closed, blocked, limited e locked são termos genéricos que descrevem a ideia, mas não são palavras reservadas do Java. A única correta é sealed — memorize-a como a palavra que "sela" a hierarquia.
Alternativa A — ❌ Incorreta
closed não é uma palavra-chave do Java. Não existe modificador closed para classes. O termo em inglês até remete à ideia de "fechar" a herança, mas a sintaxe da linguagem não o reconhece.
Alternativa B — ❌ Incorreta
blocked também não é uma palavra-chave Java. Não há como declarar uma classe como blocked para herança. O conceito de "bloquear" a herança é implementado por sealed (ou final, para impedir totalmente).
Alternativa C — ❌ Incorreta
limited não existe na sintaxe Java. Embora a palavra sugira "limitar" as subclasses, o modificador correto é sealed. Não confunda com final, que impede qualquer herança — sealed permite um conjunto restrito.
Alternativa D — ❌ Incorreta
locked não é uma palavra-chave Java. Não há como "travar" a herança com esse modificador. A ideia de restringir o acesso à herança é feita com sealed (lista explícita) ou final (nenhuma subclasse).
Alternativa E — ✅ Correta ⟵ GABARITO
sealed é a palavra-chave correta. Com ela, a superclasse declara as subclasses permitidas por meio da cláusula permits. Exemplo:
public sealed class Shape permits Circle, Square { }
Aqui, Shape só pode ser estendida por Circle e Square. Qualquer outra classe que tente herdar de Shape gera erro de compilação. Esse é o mecanismo que "limita quais classes podem realizar herança de uma superclasse" — exatamente o que o enunciado pede.