O que é Upcasting e Downcasting ? - em Java

Gostaria de receber uma explicação contextualizada sobre upcasting e downcasting em Java. Se possível com exemplos.

Vale a pena pesquisar e ler no próprio fórum

2 curtidas

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