Ed
há 13 horas
Vamos analisar cada afirmativa: I. Na função bar, c é um Automovel. Falso. Na função bar, c é declarado como Conversivel, que é uma subclasse de Automovel, mas o tipo declarado é Conversivel, não Automovel. II. Na função foo, a é um Conversivel. Falso. Na função foo, o parâmetro a é do tipo Automovel. Embora possa receber um objeto Conversivel (polimorfismo), o tipo declarado é Automovel, não Conversivel. III. No método bar, o método sendo chamado na primeira linha é determinado em tempo de compilação. Na função bar, a primeira linha é: `Conversivel c = new Conversivel();` — criação do objeto, não uma chamada de método. Se considerarmos a chamada `foo(c);`, a ligação do método foo é estática, determinada em tempo de compilação. Portanto, essa afirmativa é verdadeira. IV. No método foo, o método sendo chamado na primeira linha é determinado em tempo de compilação. Na função foo, a linha `a.locomocao();` chama um método. Como a é do tipo Automovel, mas pode referenciar um objeto de subclasse (Conversivel), a ligação do método locomocao() é dinâmica (polimorfismo), ou seja, determinada em tempo de execução. Portanto, essa afirmativa é falsa. Resumo: I - falso II - falso III - verdadeiro IV - falso Alternativa correta: III, apenas — mas essa opção não está listada. Como só III é verdadeiro, e nenhuma alternativa contempla só III, vamos revisar. Revisão do item I: "Na função bar, c é um Automovel." Embora c seja declarado como Conversivel, que é subclasse de Automovel, c é um objeto do tipo Conversivel, mas pode ser considerado um Automovel por herança. Em termos de tipo, c é do tipo Conversivel, mas pode ser tratado como Automovel. A afirmativa pode estar considerando o tipo do objeto (instância), que é um Automovel (superclasse). Se interpretarmos que "c é um Automovel" significa que c é um objeto que herda Automovel, então a afirmativa é verdadeira. Revisão do item II: "Na função foo, a é um Conversivel." a é declarado como Automovel, mas pode referenciar um objeto Conversivel. O tipo estático é Automovel, o tipo dinâmico pode ser Conversivel. A afirmativa diz "a é um Conversivel", o que pode ser interpretado como o tipo dinâmico. Se for assim, a afirmativa é verdadeira. Revisão do item IV: "No método foo, o método sendo chamado na primeira linha é determinado em tempo de compilação." Como explicado, a ligação do método locomocao() é dinâmica, determinada em tempo de execução, então é falsa. Revisão do item III: "No método bar, o método sendo chamado na primeira linha é determinado em tempo de compilação." Na função bar, a primeira linha é a criação do objeto, não uma chamada de método. A primeira chamada de método é foo(c), que é estática, determinada em tempo de compilação. Então, a afirmativa é verdadeira. Portanto, os itens verdadeiros são I, II e III. Alternativa correta: I e II, apenas (mas essa alternativa não inclui o III). A alternativa que inclui I e III é "I e III, apenas", que não inclui II. Como a questão pede a alternativa que contém todos os itens verdadeiros, e considerando a interpretação mais comum: - I é verdadeiro (c é um Automovel, pois é subclasse) - II é verdadeiro (a é um Conversivel em tempo de execução) - III é verdadeiro (chamada de foo(c) é determinada em tempo de compilação) - IV é falso Logo, os itens verdadeiros são I, II e III. Nenhuma alternativa contempla I, II e III juntos. Dado isso, a alternativa que mais se aproxima e que contém todos os itens verdadeiros é: e) I e II, apenas. Se a questão considera que III é falso (por causa da redação "na primeira linha"), então a resposta é e). Resposta final: e) I e II, apenas.
Cadastre-se ou realize login
Mais perguntas desse material