Questão nº 28
Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 28)
Considere o seguinte trecho de código em Java.
class BancoDeDados {
void conectar(String url) throws Exception {
if (url == null || url.isEmpty()) {
throw new Exception("URL inválida.");
}
System.out.println("Conectado ao banco: " + url);
}
}
class ConsultaProcesso extends BancoDeDados {
@Override
void conectar(String url) throws Exception {
System.out.println("Conexão validada.");
I
}
}
Com base nos conceitos de herança e sobrescrita e sabendo que o código será executado em condições ideais, a lacuna I deve ser corretamente preenchida com
- A`super.conectar("");`
- B`super.conectar(url);` (alternativa correta)
- C`this.conectar("jdbc:padrao");`
- D`System.out.println("Conexão concluída.");`
- E`throw new Exception("Conexão não implementada.");`
Resposta comentada
Gabarito Alternativa B
Quando uma classe filha (subclasse) cria um método com o mesmo nome e parâmetros de um método da classe pai (superclasse), ela está sobrescrevendo (overriding) esse método. Para reutilizar ou estender a lógica original do método da classe pai dentro do método sobrescrito da filha, usamos a palavra-chave `super`.
(A) Incorreta: Chama o método `conectar` da classe pai (`BancoDeDados`) com uma URL vazia (`""`), o que faria o método pai lançar uma `Exception` imediatamente devido à sua validação (`url.isEmpty()`).
(B) Correta: Chama o método `conectar` da classe pai (`BancoDeDados`), passando a URL original (`url`) recebida pelo método sobrescrito. Isso permite que a lógica de validação e conexão definida na classe pai seja executada, estendendo seu comportamento após a mensagem de "Conexão validada." da subclasse.
(C) Incorreta: `this.conectar("jdbc:padrao");` chamaria recursivamente o próprio método `conectar` da classe `ConsultaProcesso`, levando a um loop infinito e, eventualmente, a um `StackOverflowError`. Além disso, ignora a URL original passada como parâmetro. Armadilha: Embora `this` e `super` se refiram a instâncias, `this` aponta para o método da própria classe, enquanto `super` aponta para o método da classe pai.
(D) Incorreta: Apenas imprime uma mensagem no console, sem invocar a lógica de conexão e validação que está implementada no método `conectar` da classe pai. A conexão real não seria estabelecida.
(E) Incorreta: Lança uma exceção, indicando que a conexão não foi implementada. Isso interromperia o fluxo e não aproveitaria a funcionalidade de conexão já existente na classe pai.
Fonte: FCC TRT15 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.