Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FUNDATEC 2025

ProgramaçãoLinguagens 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?Q49.png 245×73
  1. Aclosed
  2. Bblocked
  3. Climited
  4. Dlocked
  5. 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.

Gabarito: letra E

Link permanente: /questoes/qg474909