Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Por que compila?

No exemplo abaixo, por que a linha 3 compila? Carro e Moto não seriam de tipos incompatíveis?

Object c = new Carro(); boolean b1 = c instanceof Carro; // true boolean b2 = c instanceof Moto; // false

Ambos objetos herdam da classe Veiculo.

2 respostas
solução!

Olá Anderson, isso acontece porque ambos (Carro e Moto) são compatíveis com Object. Em tempo de execução, a variável c declarada como Object é uma instância de Carro. Como Carro é uma instância de Carro, o b1 é verdadeiro e b2 é falso.

Olá Anderson,

A instrução c instanceof Moto apenas retorna um valor booleano que indica se o objeto apontado pela variável c é ou não é do tipo Moto, o que é uma instrução válida e compilável.

Nesta linha, você está pegando o retorno da instrução (o valor booleano) e armazenando em uma variável booleana. Uma instrução também válida e compilável:

boolean b2 = c instanceof Moto;

Diferente disso, o código não compilaria caso você tentasse atribuir o objeto do tipo Carro a uma variável do tipo Moto, como a seguir:

Moto moto = c;

Espero ter ajudado.