Downcasting e UpCasting

2 respostas
java
T
Eu tenho um código em Java que estou praticando downcasting/upcasting, mas  erro

Eu criei as classes

//public class Animal {

public void fazBarulho() {

System.out.println(Faz Barulho);

}

}

public class Cat extends Animal{

<a class="mention" href="/u/override">@Override</a>

public void fazBarulho() {

System.out.println(“Miau”);

}

}

public class Dog extends Animal{

<a class="mention" href="/u/override">@Override</a>

public void fazBarulho() {

System.out.println(“Au au au”);

}

}

//na main eu realizei o seguinte:

public static void main(String[] args) {
Dog dog = new Dog();
	Animal animal = new Animal();
	Animal animal2 = new Dog();
	Animal animal3 = new Cat();
	dog.fazBarulho();
	animal.fazBarulho();
	animal2.fazBarulho();
	animal3.fazBarulho();
	System.out.println("-- CASTING --");
	Cat siames = (Cat) animal; //Esse comando gera o erro pois quero fazer um downcasting e ver se o resultado sai como "Fazer barulho" ou "Miau"
	siames.fazBarulho()

Exception in thread “main” java.lang.ClassCastException: class entities.Animal cannot be cast to class entities.Cat (entities.Animal and entities.Cat are in unnamed module of loader ‘app’)
at application.MainExemploAnimal.main(MainExemploAnimal.java:20)

2 Respostas

staroski

A variável animal foi inicializada assim:

Animal animal = new Animal();

Ou seja, a variável animal não aponta para um objeto do tipo Cat, então não pode fazer cast.

A única variável que você pode fazer cast para Cat é a animal3.

T

Entendi. Obrigado

Criado 17 de dezembro de 2020
Ultima resposta 22 de dez. de 2020
Respostas 2
Participantes 2