Gostaria de receber uma explicação contextualizada sobre upcasting e downcasting em Java. Se possível com exemplos.
Um exemplo prático, considere as duas classes abaixo:
public class TipoGenerico {}
public class TipoEspecifico extends TipoGenerico {}
Aí, em algum lugar você possui um objeto de cada uma dessas classes:
TipoGenerico objetoGenerico = new TipoGenerico();
TipoEspecifico objetoEspecifico = new TipoEspecifico();
E el agum método você quer referenciar estes objetos em outras variáveis:
// upcasting, acontece implicitamente, pois o compilador sabe que objetos do TipoEspecifico estendem a classe TipoGenerico
TipoGenerico variavelGenerica = objetoEspecifico;
// downcasting, necessita de cast explícito, pois o compilador não tem como saber se o objeto referenciado pela variável genérica é um objeto específico ou não
// E também só é possível se de fato a variavelGenerica possui uma referência à um objeto do TipoEspecifico
// se a variavelGenerica possuísse uma referência à um objeto do TipoGenerico, ocorreria ClassCastException em tempo de execução
TipoEspecifico variavelEspecifica = (TipoEspecifico) variavelGenerica;
1 curtida