← Questões de Programação

Programação · FGV · 2024

Questão comentada de Programação

O desenvolvedor José implementou a classe CGEPrincipal em Java 17. A fim de tornar a implementação mais aderente ao modelo de domínio, José restringiu a herança da classe na declaração, especificando que a CGEPrincipal poderia ser herdada apenas pelas classes CGEUm e CGEDois. Para restringir a herança na declaração da classe CGEPrincipal, José utilizou a funcionalidade do Java 17:

Gabarito: C

No Java 17, quando voce quer controlar quem pode herdar de uma classe, a palavra-chave que resolve isso é sealed. Ela permite que o autor da classe diga, já na declaração, quais subclasses podem estendê-la. É uma forma de deixar o modelo de domínio mais fechado e previsível, evitando heranças “soltas” que ninguém queria ver aparecendo depois. Na prática, a classe principal é declarada como sealed e, em seguida, informa quais classes estão autorizadas a herdar dela. Essas subclasses permitidas normalmente precisam também obedecer às regras da própria hierarquia, como usar permits e, em muitos casos, continuar a cadeia com final, sealed ou non-sealed, conforme o desenho desejado. É exatamente isso que o enunciado descreve ao dizer que a CGEPrincipal poderia ser herdada apenas por CGEUm e CGEDois. Logo, José usou sealed class. Esse recurso foi introduzido no Java como parte do refinamento do sistema de tipos e da modelagem orientada a objetos, muito útil quando você quer limitar extensões indevidas e deixar o código mais expressivo. As outras opções não tratam de controle de herança. Reflection serve para inspecionar e manipular estruturas em tempo de execução, pattern matching é para casar padrões, static class não é o mecanismo correto para esse tipo de restrição em Java, e foreign function é sobre interoperabilidade com código externo. Então o gabarito C está certinho.

Continue treinando

Questões relacionadas