Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre Casting de classes

Não estou entendendo a lógica do casting de classes, no exemplo da atividade:

Crie uma classe Animal e uma classe Cachorro que herda de Animal. Em seguida, crie um objeto da classe Cachorro e faça o casting para a classe Animal.

Criei a classe cachorro sendo subclasse da classe animal, animal tem nome e cachorro tem raça, quando eu faço o casting:

   var dog = new Cachorro("dragao","poodle");
    System.out.println(dog);

    Animal dog1 = dog;
    System.out.println(dog1);
    

O objeto do casting dog1(da classe animal no caso né?) tem o atributo de raça ainda, mas a classe animal não tem esse atributo.
minha cabeça deu uma bugada, não consigo entender para que serve e como funciona.
Alguém poderia me ajudar?

1 resposta
solução!

Olá Dalton! Tudo bem?

Quando você faz o casting de um objeto de uma classe filha (no seu caso, Cachorro) para uma classe mãe (no caso, Animal), você está essencialmente tratando o objeto como se ele fosse do tipo da classe mãe. Isso é possível porque Cachorro herda de Animal, então um Cachorro é um tipo de Animal.

No seu exemplo:

var dog = new Cachorro("dragao", "poodle");
Animal dog1 = dog;

Aqui, dog1 é uma referência do tipo Animal, mas ainda aponta para o mesmo objeto Cachorro que dog aponta. Isso significa que o objeto ainda é um Cachorro e possui todos os atributos e métodos de Cachorro, mas através da referência dog1, você só pode acessar os métodos e atributos que estão definidos na classe Animal.

Se você tentar acessar dog1.raça, por exemplo, não será possível diretamente, porque raça é um atributo específico da classe Cachorro e não está definido em Animal.

O objetivo do casting é permitir que você trate um objeto como se ele fosse de um tipo mais genérico (neste caso, Animal), o que pode ser útil em várias situações, como quando você quer manipular uma coleção de diferentes tipos de Animal.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.