Não entendi muito bem a resolução da terceira questão prática. Alguém poderia explicar ela de maneira geral, pfvr?
Não entendi muito bem a resolução da terceira questão prática. Alguém poderia explicar ela de maneira geral, pfvr?
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!
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
.