SóProvas


ID
2354779
Banca
UFMT
Órgão
UFSBA
Ano
2017
Provas
Disciplina
Programação
Assuntos

Considere os elementos da linguagem Java abaixo:

interface I { }

class A implements I { }

class B extends A { }

class C extends B { }

e as declarações abaixo:

A a = new A( );

B b = new B( );

Assinale a alternativa que apresenta a declaração que irá compilar e executar sem erros.

Alternativas
Comentários
  • Quem não tem acesso:  - -> D

  • A letra C compilou normal. JDK 1.8

  • 2 regras:

    Upcasting:

    - Podemos atribuir um tipo específico a um genérico sem cast explícito.

    - Ex: I i = new A();

    Downcasting:

    - Podemos fazer um cast de um tipo genérico para um específico desde que o atributo esteja referenciando este objeto específico.

    - Ex: I i = new A(); A a = (A) i;

    .

    a) b = (A)(I)a -> Erro de compilação. Não posso atribuir "A" a "B" porque "B" não é mais genérico que "A"

    b) C c = (I)b -> Erro de compilação. Não posso atribuir de "I" a "C" porque "C" não é mais genérico que "I"

    c) I i = (C)a -> Erro de execução. Não posso fazer um cast do objeto mais genérico "A" para o mais específico "C". 

    d) a = (B)(I)b -> O cast de "B" para "I" é opcional. O cast de "I" para "B" vai dar certo porque o atributo está referenciando um objeto do tipo B. A atribuição de "B" em "A" dá certo porque "A" é mais genérico