2
respostas

[Dúvida] Dúvida sobre a terceira questão

Não entendi muito bem a resolução da terceira questão prática. Alguém poderia explicar ela de maneira geral, pfvr?

2 respostas

Oi, Enzo! Tudo bem?

A terceira questão é uma extensão da segunda, onde criamos uma classe Animal e uma classe Cachorro, em que Cachorro herda de Animal, ou seja, Cachorro terá todas as características (propriedades e métodos) de Animal, além das suas próprias.

Somado a isso, dentro do nosso Main criamos um objeto da classe Cachorro que é instanciado e atribuído a uma referência do tipo Animal, o que é possível porque Cachorro é um tipo de Animal, devido à herança.

Dessa forma, na terceira questão, devemos apenas adicionar uma verificação usando instanceof antes de realizar o casting (conversão de tipo) do objeto animal para Cachorro. O operador instanceof é usado para verificar se um objeto é de um tipo específico, verificando se o objeto é uma instância da classe especificada ou de alguma classe que herda dela. Nesse caso, verifica-se se animal é uma instância de Cachorro.

Assim, se o objeto animal for uma instância de Cachorro, o casting é realizado com segurança, convertendo animal para o tipo Cachorro. Caso o objeto animal não seja uma instância de Cachorro, uma mensagem de erro é impressa, informando que o objeto não é um cachorro.

Vamos ver o exemplo prático:

class Animal {
    // propriedades e métodos comuns 
}

class Cachorro extends Animal {
    // propriedades e métodos do cachorro
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Cachorro();

        if (animal instanceof Cachorro) {
            Cachorro cachorro = (Cachorro) animal;
            // Agora você pode usar o objeto 'cachorro' como um Cachorro.
        } else {
            System.out.println("O objeto não é um Cachorro.");
        }
    }
}

Em resumo, criamos um objeto Cachorro e o transformamos em um objeto Animal. Em seguida, verificamos se esse objeto Animal é realmente um Cachorro antes de tentar fazer o casting de volta para Cachorro. Se o objeto não fosse um Cachorro, o código dentro do bloco if não seria executado, evitando assim um erro de ClassCastException.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

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

Oi, Sarah! Tudo bem siiim, e com você?

A minha maior dúvida é o porquê de o casting ter sido feito.

Você explicou que foi criado um objeto do tipo Cachorro que foi instanciado e atribuído a referência do tipo Animal.

Na estrutura condicional é verificado por meio do instanceof se o objeto animal é uma instância de Cachorro, certo? E após isso o código, nesse caso, é executado e o casting é realizado.

Só que não entendi já que, como você explicou, o objeto animal foi instanciado e atribuído a uma referência do tipo Animal, e não Cachorro.