Questão nº 47

Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2018 (nº 47)

CESGRANRIO2018Técnico Científico - Área de Formação: Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Dver comentário ↓

Considere a hierarquia de classes mostrada na Figura a seguir:

Figura da questão de Tecnologia da Informação

Considere agora o seguinte fragmento de código Java baseado na hierarquia anterior:

public class Main {
    public static void main(String[] args) {
        Caminhao caminhao = new Caminhao();     // linha 1
        IVeiculo veiculo = caminhao;            // linha 2
        QuatroRodas fw = new Guindaste();       // linha 3
        fw = veiculo;                           // linha 4
        veiculo = fw;                           // linha 5
    }
}

A linha marcada por um comentário que causará um erro em tempo de compilação é a linha

Resposta comentada

Gabarito Alternativa D

Conceito-chave: Em Java, o tipo da variável define quais métodos podem ser chamados e qual tipo de objeto ela pode referenciar. A atribuição variavel = objeto só compila se o tipo da variável for superclasse (ou interface) do tipo do objeto, nunca o contrário (a menos que haja cast explícito).

  • (A) Incorreta: Caminhao caminhao = new Caminhao(); é válido, pois a variável é do mesmo tipo do objeto instanciado.
  • (B) Incorreta: IVeiculo veiculo = caminhao; é válido, pois Caminhao implementa IVeiculo (a interface é supertipo), então há upcast implícito.
  • (C) Incorreta: QuatroRodas fw = new Guindaste(); é válido, pois Guindaste é subclasse de QuatroRodas (upcast implícito).
  • (D) Correta: fw = veiculo; gera erro de compilação porque veiculo é do tipo IVeiculo (interface) e fw é do tipo QuatroRodas (classe). O compilador não sabe se o objeto referenciado por veiculo é um QuatroRodas ou outro tipo de IVeiculo (ex.: Caminhao), então downcast sem cast explícito é proibido. A pegadinha é que, embora veiculo aponte para um Caminhao (que é QuatroRodas), o tipo estático da variável é IVeiculo, e o compilador só analisa tipos declarados, não objetos em tempo de execução.
  • (E) Incorreta: veiculo = fw; é válido, pois QuatroRodas implementa IVeiculo (upcast implícito de fw para IVeiculo).

Fonte: CESGRANRIO BASA 01/2018 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho