Questão nº 33
Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 33)
Considere o seguinte trecho de código em Java.
```java
class A {
public String processo(String param) {
return "A: " + param;
}
}
class B extends A {
@Override
public String processo(String param) {
return "B: " + param;
}
public String processo(Integer nroprocesso) {
return "B(Integer): " + nroprocesso;
}
}
class Main {
public static void main(String[] args) {
A nproc = new A();
System.out.println(nproc.processo("teste"));
System.out.println(((B) nproc).processo(123));
}
}
```
Considerando os conceitos de orientação a objetos e que o código será compilado e executado em condições ideais, é correto afirmar que
- Aa saída do programa será:
```
A: teste
B(Integer): 123
``` - Ba saída do programa será:
```
B: teste
B(Integer): 123
``` - Ca saída do programa será:
```
A: teste
A: 123
``` - Do código não compilará devido à tentativa de downcast incompatível entre A e B.
- Eo código lançará uma `ClassCastException` em tempo de execução, pois o objeto `nproc` não é originalmente uma instância da classe B. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Herança permite que uma classe (subclasse) reutilize e estenda o comportamento de outra (superclasse). Casting é a conversão explícita de um tipo de dado para outro; um downcast (de superclasse para subclasse) só é seguro se o objeto original já for uma instância da subclasse ou de uma de suas subclasses.
(A) Incorreta: A segunda linha de saída está errada porque o cast falharia em tempo de execução, impedindo a chamada do método `processo(Integer)` de `B`. A armadilha é ignorar o tipo real do objeto (`new A()`) e assumir que o cast será bem-sucedido.
(B) Incorreta: A primeira linha de saída está errada, pois `nproc` é um objeto do tipo `A`, então seu método `processo(String)` é chamado. A segunda linha também está errada pelo mesmo motivo da alternativa A.
(C) Incorreta: A segunda linha de saída está errada, pois a classe `A` não possui um método `processo` que aceite um `Integer` como parâmetro.
(D) Incorreta: O código compila sem erros, pois o compilador permite o downcast entre classes relacionadas por herança; a verificação de compatibilidade de tipos ocorre apenas em tempo de execução.
(E) Correta: O objeto `nproc` foi instanciado como `new A()`. Ao tentar fazer um downcast `((B) nproc)`, o Java verifica em tempo de execução se o objeto realmente é uma instância de `B` ou de uma de suas subclasses. Como `nproc` é um `A` puro e não um `B`, essa verificação falha e uma `ClassCastException` é lançada.
Fonte: FCC TRT15 2024 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.