2
respostas

Cast da classe Object

Funcionario[] referencias = new Funcionario[5];

referencias[0] = new Designer();

???? ref = (????) referencias[0];

Dentro dos parênteses não seria o tipo mais específico, e a direita o tipo mais genérico ?

Na opção 4 substituindo por Object, referencias[] é mais específico, e dentro dos parênteses ficaria Object (mais genérico), logo Object não é um Funcionario, e sim Funcionario é um Object. Esta leitura, tendo como a base os parênteses está errada ? O que valeria seria a declaraçao da referência antes da atribuição ?

2 respostas

Olá,

basicamente seria:

  • Como tudo é Object, vc não precisa do cast.
  • O cast é uma forma de vc assumir o risco com compilador e ele confia tanto a ponto de em caso de vc errar, estourar a ClassCastException.
Cachorro ref = (Cachorro) referencias[0];

Seria como se vc estivesse falando ao compilador que pode colocar a referência dentro do cesto de Cachorro(s), porque vc garante que o objeto apontado será um Cachorro.

[]'s

Olá,

Entendi, independente se o tipo da (referencias) seja Funcionario: Funcionario[] referencias = new Funcionario[5]; o compilador não valida se o cast que deseja fazer é do mesmo tipo ou se herda do tipo declarado no []. Sendo assim, assume-se o risco, de que o conteúdo de referencias[0] aponte para uma instância de Cachorro.