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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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.