Alternativa C - Apenas I, II, IV e V são verdadeiras.
Análise Detalhada
Esta questão aborda conceitos fundamentais da Programação Orientada a Objetos (POO) em Java, especificamente focando nas regras de sobrecarga (overloading) e sobrescrita (overriding) de métodos. Vamos analisar cada afirmativa individualmente:
Afirmativa I: Verdadeira
"métodos sobrecarregados podem possuir diferentes tipos de retorno."
- Conceito: A sobrecarga ocorre quando definimos vários métodos com o mesmo nome na mesma classe, diferenciando-os pelos parâmetros (tipo, quantidade ou ordem).
- Explicação: Embora o tipo de retorno não faça parte da assinatura do método (e não possa ser usado para distinguir métodos com os mesmos parâmetros), métodos sobrecarregados (com parâmetros diferentes) podem sim ter tipos de retorno distintos.
- Exemplo:
void calcular() e int calcular(). Ambos são válidos se houver diferença nos parâmetros, embora o retorno seja irrelevante para a distinção pelo compilador.
Afirmativa II: Verdadeira
"métodos declarados com o modificador final não podem ser sobrescritos."
- Conceito: O modificador
final é utilizado para impedir modificações. - Explicação: Se um método é marcado como
final, ele torna-se imutável na hierarquia de herança. As subclasses são obrigadas a usar a implementação da classe pai, sendo vedada a criação de uma nova versão (sobrescrita).
Afirmativa III: Falsa
"um método sobrescrito pode ter sua visibilidade reduzida na subclasse."
- Conceito: A sobrescrita exige respeito ao contrato de acessibilidade.
- Explicação: Na Java, a visibilidade do método na subclasse deve ser igual ou mais ampla (menos restritiva) que a da superclasse.
- Exemplo: Se o método é
protected na superclasse, ele pode ser public na subclasse. Porém, ele nunca pode ser private ou ter permissão padrão (default) se a original fosse protected ou public. Reduzir a visibilidade causaria erro de compilação.
Afirmativa IV: Verdadeira
"métodos sobrecarregados devem possuir nomes iguais."
- Conceito: Esta é a definição central da sobrecarga.
- Explicação: Para haver sobrecarga, é obrigatório que os métodos tenham o mesmo identificador (nome), variando apenas na lista de argumentos. Se os nomes forem diferentes, trata-se de métodos independentes.
Afirmativa V: Verdadeira
"métodos sobrescritos devem possuir assinaturas iguais."
- Conceito: Para que um método da subclasse substitua corretamente um método da superclasse, ele deve corresponder exatamente à assinatura.
- Explicação: A assinatura é composta pelo nome do método e os tipos dos parâmetros. Se a assinatura mudar, o compilador entende como uma nova definição (sobrecarga) e não como uma sobrescrita.
Conclusão
Com base na análise acima:
- I (Verdadeiro): Retornos podem variar entre sobrecargas.
- II (Verdadeiro): Final bloqueia sobrescrita.
- III (Falso): Visibilidade não pode ser reduzida.
- IV (Verdadeiro): Nomes devem ser iguais na sobrecarga.
- V (Verdadeiro): Assinaturas devem ser iguais na sobrescrita.
Portanto, as afirmativas corretas são I, II, IV e V, correspondendo à Alternativa C.